处理:椭圆鼠标跟随没有重叠

问题描述:

我是一个完整的初学者与处理,并试图获得一排省略沿着鼠标的路径与他们的边缘接触,但不重叠。处理:椭圆鼠标跟随没有重叠

我的第一运动是使用线来跟踪在阵列中的鼠标的历史,注释行中的每个索引处添加一个椭圆形,以及:

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)); 
    } 
}