Рисование вращающегося треугольника

#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. Спасибо, совсем забыл об этой функции! Я попробую это, когда у меня будет время.