- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一小段原型(prototype)代码。
我试图让它在 mousePressed() 或 mouseClicked() 上单击的线条的颜色会改变。
我这辈子都无法弄清楚!
任何帮助将不胜感激!
我到目前为止编写的代码如下,它应该可以正常工作。
int value = 0;
ArrayList<Line> l = new ArrayList<Line>();
void setup() {
size(500,500);
background(57, 76, 222);
//noLoop();
stroke(255);
strokeWeight(3);
}
void draw() {
for (int i = 1; i< 20; i++) {
l.add(new Line());
for (int a=0; a< l.size(); a++){
l.get(a).display();
noLoop();
}
}
int total = l.size();
println("The total number of lines is: " + total);
}
class Line {
int ranX1, ranX2, ranY1, ranY2;
Line() {
ranX1 = int(random(50,450));
ranX2 = int(random(50,450));
ranY1 = int(random(50,450));
ranY2 = int(random(50,450));
}
void update() {
//
}
void display() {
line(ranX1,ranX2,ranY1,ranY2);
}
}
最佳答案
如果有一条线,由一个点 (O
) 和一个方向 (D
) 给出,那么该线上距离点 p 最近的点可以计算如下
X = O + D * dot(P-O, D);
两个 vector 的点积等于两个 vector 之间的角度的余弦乘以两个 vector 的大小(长度)。
dot( A, B ) == | A | * | B | * cos( alpha )
V
和 D
的点积等于直线 (O
, D
) 之间角度的余弦code>) 和 vector V = P - O
,乘以 V
的数量(长度),因为 D
是 unit vector (D
的长度为 1.0)。
使用PVector
获取从 (ranX1
, ranY1
) 到 (ranX2
, ranY2
) 的方向,并将方向 vector 设为单位 vector .normalize()
。 vector 的长度由 .mag()
验证:
PVector D = new PVector(ranX2 - ranX1, ranY2 - ranY1);
if ( D.mag() > 0.0 )
D.normalize();
使用上述算法计算到无限直线的法向距离,其中 0 点 (ranX1
, ranY1
) 和 (ranX2
, ranY2
)已开启。为此,方法.mult()
, .add()
, .dist()
和 .dot()
用途:
PVector X = new PVector(ranX1, ranY1);
X.add( D.mult( D.dot( vP1 ) ) );
boolean hit = X.dist(new PVector(x, y)) < hit_dist;
使用点积验证直线与法线的交点(X
)是否经过点(x
, y
) 位于 (ranX1
, ranY1
) 和 (ranX2
, ranY2
) 之间。如果两个亚麻布之间的角度大于 90 度或小于 -90 度,则点积小于 0.0:
PVector vP1 = new PVector(x - ranX1, y - ranY1);
if ( D.dot( vP1 ) < 0.0 )
hit = false;
PVector vP2 = new PVector(x - ranX2, y - ranY2);
if ( D.dot( vP2 ) > 0.0 )
hit = false;
向类 Line
添加方法 isHit
,用于检查输入位置 (x
, y
) 已上线。可以通过 hit_dist
设置识别线上点击的可接受精度。如果必须准确命中该线,请减小该值。增加它以允许在球线旁边但靠近球线的地方击球。添加颜色属性 col
和可以更改颜色的方法:
class Line {
// [...]
color col;
// [...]
void setColor(color c) {
col = c;
}
boolean isHit(int x, int y) {
final int hit_dist = 5;
// [...]
return hit;
}
}
使用鼠标按下事件mousePressed()
循环遍历所有行。改变每条线的颜色是按下鼠标时鼠标2hit":
void mousePressed() {
for (int i = 0; i < l.size(); ++i) {
if (l.get(i).isHit(mouseX, mouseY)) {
l.get(i).setColor(color(255, 0, 0) );
}
}
}
查看示例,它实现了算法并对您的代码进行了一些进一步的改进和错误修复:
int value = 0;
ArrayList<Line> l = new ArrayList<Line>();
void setup() {
size(500,500);
for (int i = 0; i < 20; ++i) {
l.add(new Line());
}
}
void draw() {
background(57, 76, 222);
strokeWeight(3);
for (int i = 0; i < l.size(); ++i) {
l.get(i).display();
}
}
void mousePressed() {
for (int i = 0; i < l.size(); ++i) {
if (l.get(i).isHit(mouseX, mouseY)) {
l.get(i).setColor(color(255, 0, 0) );
}
}
}
class Line {
int ranX1, ranX2, ranY1, ranY2;
color col;
Line() {
col = color(255);
ranX1 = int(random(50,450));
ranX2 = int(random(50,450));
ranY1 = int(random(50,450));
ranY2 = int(random(50,450));
}
void setColor(color c) {
col = c;
}
boolean isHit(int x, int y) {
final int hit_dist = 5;
PVector D = new PVector(ranX2 - ranX1, ranY2 - ranY1);
if ( D.mag() > 0.0 )
D.normalize();
PVector vP1 = new PVector(x - ranX1, y - ranY1);
if ( D.dot( vP1 ) < 0.0 )
return false;
PVector vP2 = new PVector(x - ranX2, y - ranY2);
if ( D.dot( vP2 ) > 0.0 )
return false;
PVector X = new PVector(ranX1, ranY1);
X.add( D.mult( D.dot( vP1 ) ) );
boolean hit = X.dist(new PVector(x, y)) < hit_dist;
return hit;
}
void display() {
stroke(col);
line(ranX1, ranY1, ranX2, ranY2);
}
}
关于java - 如何更改 mousePress() 上单行的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55678946/
我创建这个是为了当在鼠标的 x 和 y 坐标处按下鼠标时画一条鱼。但我似乎没有调用drawfish 方法。我找不到它不起作用的原因。我将非常感谢任何帮助。 /*FishTank*/ impor
我用 Java 编写了一个简单的实用程序,可以让鼠标单击任意位置,每 X 毫秒一次: import java.awt.Robot; import java.awt.event.InputEvent;
我正在尝试做一些非常基本的事情:编写程序,在两点之间的框架上画一条线:按下鼠标的点和释放鼠标的点。 我有这些类(class): import java.awt.Graphics; public cla
我知道有很多关于 mousePressed 无法正常工作的线程,但我还没有找到问题的答案。我编写了一个程序,只是为了好玩和体验,但是我在使用 Robot 类的 mousePressed 方法时遇到了问
我正在制作有关处理的动画。然后,我有一个关于灯的问题。通常,我的代码比较长。但是,我制作了一个简单的代码,对初学者也很有用。 void setup() { size(400, 400, P3D);
当用户点击它时,我试图获取 JOGL 中像素的颜色。如果我将以下代码放入显示方法中(来自GLEventListener),它就可以正常工作。 FloatBuffer buffer = FloatBuf
所以我有一个标签,我想做下一个,默认情况下它以红色背景颜色开始,当我第一次单击(鼠标按下)时,我将背景颜色更改为绿色。 现在,我希望当我第二次按下它时,一旦我再次按下它,它就会变回红色。 就像是红色的
在 mousePressed 方法中,我无法使用任何与图形相关的方法,例如此代码将运行但不起作用 import org.newdawn.slick.GameContainer; import org.
我正在尝试在按钮 4 上使用鼠标事件。使用 时返回的值 int moused = MouseInfo.getNumberOfButtons(); 方法是5。除了右键单击按钮4之外,我不知道还有什么按钮
我有一小段原型(prototype)代码。 我试图让它在 mousePressed() 或 mouseClicked() 上单击的线条的颜色会改变。 我这辈子都无法弄清楚! 任何帮助将不胜感激! 我到
在下面的代码中,点击标签本应使其隐藏,但该方法从未被调用!我在这里错过了什么? package com.hermaryopto.lib.output.message; import java.
我正在编写一个程序,鼠标监听器 mousePressed() 似乎没有响应。我现在已经编写了一些 GUI 程序,并且比较了这些代码,我没有发现任何显着差异可以解释缺少鼠标监听的原因。以下代码不完整,其
我创建了一个 foreach 循环,它创建 ImageView 并使用 javafx 显示它们,但是找到的每个 ImageView 都必须有一个类似于 mousepressed 事件的事件,我已经编写
import java.awt.Frame; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt
我正在 Mac OSX 上使用 Eclipse 测试一个简单的 java 图形程序,代码如下: public void mousePressed(MouseEvent e) { System.
我已经安装了所有 p5 并且工作正常,但是每当我开始使用 mousePressed() 它就不起作用(keyPressed 也不起作用)。这是有问题的部分: //press play butt
我正在尝试构建一个简单的应用程序,当您在屏幕上按下/单击时它会播放一首歌曲。一旦您按下/单击,涟漪效应就会发生,同时也会产生视觉效果。 每次按下/单击时都会发生涟漪,但在我的代码中(每次单击都会重新启
我正在尝试访问 mousePressed ProcessingJS 片段中的属性,但得到 undefined。 这是我到目前为止尝试过的: $(document).ready(function(
为下面的函数运行println(game.gameOn) 仍然输出false。 为什么会这样模棱两可? 解决方案是什么? 也许我不能将对象作为参数传递给函数 mousePressed() void m
我创建了几个用于显示值的 JLabels(来自 MySQL),它们必须通过 mousePressed 进行切换,但每次单击后所有值都会覆盖其他值。 在显示新值时需要清除以前的文本吗?也许有比 JLab
我是一名优秀的程序员,十分优秀!