Java 如何更改鼠标按()上单行的颜色

Java 如何更改鼠标按()上单行的颜色,java,processing,Java,Processing,我有一小段原型代码 我正在尝试使用它,以便在鼠标按下()或鼠标单击()时,单击的线条的颜色将发生变化 我一辈子都想不出来 任何帮助都将不胜感激 到目前为止,我编写的代码如下,它应该可以正常工作 int值=0; ArrayList l=新的ArrayList(); 无效设置(){ 尺寸(500500); 背景(57,76,222); //noLoop(); 中风(255); 冲程重量(3); } 作废提款(){ 对于(int i=1;i

我有一小段原型代码

我正在尝试使用它,以便在鼠标按下()或鼠标单击()时,单击的线条的颜色将发生变化

我一辈子都想不出来

任何帮助都将不胜感激

到目前为止,我编写的代码如下,它应该可以正常工作

int值=0;
ArrayList l=新的ArrayList();
无效设置(){
尺寸(500500);
背景(57,76,222);
//noLoop();
中风(255);
冲程重量(3);
}
作废提款(){
对于(int i=1;i<20;i++){
l、 添加(新行());
对于(int a=0;a
如果你有一条线,由一个点(
O
)和一个方向(
D
)给出,那么线上距离点p最近的点可以计算如下

X = O + D * dot(P-O, D);

两个矢量的点积等于两个矢量之间的夹角的余弦乘以两个矢量的大小(长度)

V
D
的点积等于直线(
O
D
)和向量
V=p-O
)之间的夹角的余弦乘以
V
的量(长度),因为
D
是a(
D
的长度是1.0)

用于获取从(
ranX1
ranY1
)到(
ranX2
ranY2
)的方向,并将方向向量转换为单位向量。向量的长度通过以下方式验证:

PVector D=新的PVector(ranX2-ranX1,ranY2-ranY1);
如果(D.mag()>0.0)
D.规范化();
使用上述算法计算到无极线的法线距离,其中点(
ranX1
ranY1
)和(
ranX2
ranY2
)处于启用状态。为此,使用以下方法和:

PVector X=新的PVector(ranX1,ranY1);
X.add(D.mult(D.dot(vP1));
布尔hit=X.dist(新的PVector(X,y))
使用点积验证线和通过an点(
X
y
)的正常线的交点(
X
)是否在(
ranX1
ranY1
)和(
ranX2
ranY2
)之间。如果两条亚麻布之间的角度大于90度或小于-90度,则点积小于0.0:

PVector vP1=新的PVector(x-ranX1,y-ranY1);
if(D.dot(vP1)<0.0)
命中=错误;
PVector vP2=新PVector(x-ranX2,y-ranY2);
如果(D.dot(vP2)>0.0)
命中=错误;
将方法
isHit
添加到类
,该方法检查输入位置(
x
y
)是否在该行。可通过
hit\u dist
设置识别线上点击的可接受精度。如果必须准确击中线路,则减小该值。增加它以允许在靠近线的地方击球。添加颜色属性
col
和可更改颜色的方法:

类行{
// [...]
颜色颜色;
// [...]
无效设置颜色(颜色c){
col=c;
}
布尔isHit(整数x,整数y){
最终整数命中距离=5;
// [...]
回击;
}
}
使用鼠标按下事件遍历循环中的所有行。更改每行的颜色。按下鼠标时,鼠标“按2下”:

void mousePressed(){
对于(int i=0;i
请参阅示例,该示例实现了该算法,并对代码进行了一些进一步的改进和错误修复:

int值=0;
ArrayList l=新的ArrayList();
无效设置(){
尺寸(500500);
对于(int i=0;i<20;++i){
l、 添加(新行());
}
}
作废提款(){
背景(57,76,222);
冲程重量(3);
对于(int i=0;i0.0)
D.规范化();
PVector vP1=新PVector(x-ranX1,y-ranY1);
if(D.dot(vP1)<0.0)
返回false;
PVector vP2=新PVector(x-ranX2,y-ranY2);
如果(D.dot(vP2)>0.0)
返回false;
PVector X=新PVector(ranX1,ranY1);
X.add(D.mult(D.dot(vP1));
布尔hit=X.dist(新的PVector(X,y))
若我是你们,我会从谷歌搜索“点-线段碰撞检测”或“检测点是否靠近线段”或类似内容开始。
dot( A, B ) == | A | * | B | * cos( alpha )