Одним из способов достижения того, что вы хотите сделать с помощью своего примера эскиза, было бы вращение как графического объекта, так и эскиза с одинаковой скоростью.Я переписал некоторые ваши коды для достижения цели, но они не должны быть слишком разными, чтобы следовать:
let rotatingRect;
function setup(){
createCanvas(400, 400);
rotatingRect = createGraphics(100, 100);
rotatingRect.background(240);
rotatingRect.strokeWeight(4);
rotatingRect.stroke('red');
rotatingRect.point(20, 20);
}
function draw(){
noStroke();
background('lightyellow');
fill('lightblue');
rect(100, 100, 200, 200);
rotatingRect.stroke('blue');
push();
translate(200, 200);
rotate(radians(frameCount));
rotatingRect.push();
rotatingRect.translate(50, 50);
rotatingRect.rotate(-radians(frameCount));
rotatingRect.point(mouseX-200, mouseY-200);
//rotatingRect.point(0, -10);
rotatingRect.pop();
image(rotatingRect, -50, -50);
pop();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js"></script>
Отличительной особенностью является то, что позиция синей точки определяется мышью.Вы можете изменить это поведение, комментируя строку rotatingRect.point(mouseX-200, mouseY-200);
и используя вместо нее rotatingRect.point(0, -10);
.Стоит отметить, что точки рисуются и, в зависимости от скорости вращения или синей точки (если она подвижная), тропа не будет непрерывной.Чтобы добиться этого, я бы начал отслеживать предыдущие позиции синей точки и использовать что-то вроде line () вместо point()
между последней позицией и текущей.