#java #android #rotation #geometry
#java #Android #вращение #геометрия
Вопрос:
Я хочу заполнить треугольник в Android с помощью класса Canvas. То, что я делаю в настоящее время, работает, но очень медленно. Я хотел знать, есть ли у кого-нибудь более быстрый способ сделать это, чем мой. Спасибо!
Мой код:
public void rotate(float angle){
if(neighbour == null)
return;
path.reset();
Point origin = rotatePoint(neighbour.getX() 64, neighbour.getY() 128 16, neighbour.getX() 64, neighbour.getY() 64, angle);
Point a = rotatePoint(neighbour.getX() 64, neighbour.getY() 128 neighbour.getWidth() neighbour.getHeight(), neighbour.getX() 64, neighbour.getY() 64, angle - 15);
Point b = rotatePoint(neighbour.getX() 64, neighbour.getY() 128 neighbour.getWidth() neighbour.getHeight(), neighbour.getX() 64, neighbour.getY() 64, angle 15);
path.moveTo(origin.x, origin.y);
path.lineTo(a.x, a.y);
path.lineTo(b.x, b.y);
}
neighbour — это просто класс, который содержит x
и y
значения.
Метод поворота точки:
private Point rotatePoint(float x, float y, float px, float py, float angle){
float s = (float)Math.sin(Math.toRadians(angle));
float c = (float)Math.cos(Math.toRadians(angle));
x -= px;
y -= py;
float xnew = x * c - y * s;
float ynew = x * s y * c;
x = xnew px;
y = ynew py;
return new Point((int)x, (int)y);
}
Этот треугольник будет вращаться довольно часто, поэтому мне нужен эффективный способ сделать это.
Ответ №1:
Вы можете просто нарисовать треугольник всегда с одним и тем же путем, но перед рисованием пути поверните холст на нужный угол поворота.
canvas.save();
canvas.rotate(degrees);
//draw your triangle here
canvas.restore();
Существует также
canvas.rotate(degrees, x, y);
если вам нужно указать ему точку поворота.
Комментарии:
1. Спасибо, совсем забыл об этой функции! Я попробую это, когда у меня будет время.