处理:椭圆鼠标跟随没有重叠
问题描述:
我是一个完整的初学者与处理,并试图获得一排省略沿着鼠标的路径与他们的边缘接触,但不重叠。处理:椭圆鼠标跟随没有重叠
我的第一运动是使用线来跟踪在阵列中的鼠标的历史,注释行中的每个索引处添加一个椭圆形,以及:
ArrayList <PVector> history;
float preX;
float preY;
void setup() {
size(1024, 1024);
history = new ArrayList <PVector>();
}
void draw() {
background(255);
for(int i=1; i<history.size(); i++){
//ellipse(history.get(i).x, history.get(i).y, 50,50);
PVector pointA = history.get(i-1);
PVector pointB = history.get(i);
line(pointA.x, pointA.y, pointB.x, pointB.y);
}
}
void mouseDragged() {
preX= mouseX;
preY= mouseY;
history.add(new PVector(mouseX,mouseY));
}
我想应该定义半径可变并使用dist()来计算当前鼠标位置和沿鼠标历史绘制的最后一个椭圆之间的距离,然后使用if语句只在该距离==半径* 2时绘制椭圆,但当I尝试将其转换为处理代码。任何人都可以帮助我开始?我在其他地方寻找提示方面遇到了很多麻烦 - 即使只是朝着正确的方向发展,也将非常感激!
答
我想我应该定义一个半径变量和使用DIST()来计算当前鼠标的位置,并且沿着鼠标历史上最后绘制的椭圆之间的距离,if语句然后使用只绘制椭圆如果那距离==半径* 2
这听起来像是一个很好的计划。我可以给你的最好的建议是break your problem down into smaller pieces,并一次一个接一个。
例如,您是否可以从基本草图开始,只显示某处的硬编码圆圈,然后打印出它与鼠标之间的距离?以此为基础。你可以做到这一点,因此圆圈通常是红色的,但当鼠标距离它一定距离时会变成绿色?现在你可以做到这一点,它会变绿时画一个新的圆圈?
提示:如果您检查距离是否与半径完全相等,则只会检查一小组位置,而鼠标可能不会那么精确。相反,您可能需要检查距离是否在半径之外。你可能会发现this collision detection tutorial有用。
答
void mouseDragged() {
if(dist(preX,preY,mouseX,mouseY)>=50){
float angle=atan2(mouseX-preX,mouseY-preY);
preX+=sin(angle)*50;
preY+=cos(angle)*50;
history.add(new PVector(preX,preY));
}
}