Вы можете:
- использовать
atan2()
для расчета поворота между двумя точками, - использовать
push()
чтобы изолировать координатное пространство (вращать локально, не затрагивая остальную часть эскиза (например, линию) - просто вызовите
rotate()
: он принимает угол в радианах, который atan2()
возвращает
Вот пример, основанный на вашем фрагменте:
let fromX = 200;
let fromY = 200;
let toX = 300;
let toY = 100;
let triangleSize = 5;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
// test: change to position
toX = mouseX;
toY = mouseY;
let middleX = (fromX + toX) / 2;
let middleY = (fromY + toY) / 2;
// calculate the angle between from -> to points
let angle = atan2(toY - fromY, toX - fromX);
// isolate coordinate system (indenting is purely visual, not required)
push();
// move to central position
translate(middleX, middleY);
// rotate from translated position
rotate(angle);
// render triangle
triangle(0, triangleSize, triangleSize, 0, 0, -triangleSize);
pop();
line(fromX, fromY, toX, toY);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
Обратите внимание , что порядок преобразований (перемещение, поворот, масштаб) важен. (например, если повернуть, то при повороте треугольник приземлится в другом месте)
Также вы рисуете треугольник, указывающий вправо по умолчанию, который хорошо выравнивается с вращением 0 радиан.