gpt4 book ai didi

java - 如何选择一条线

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:11 26 4
gpt4 key购买 nike

所以我想弄清楚如何实现一种在绘图区域中选择线或边的方法,但我的数学有点欠缺。这是我到目前为止得到的:

  • 线的集合,每条线有两个端点(一个开始,一个结束)
  • 在 Canvas 上正确绘制线条
  • 点击 Canvas 时会收到鼠标点击事件,所以我可以得到鼠标指针的x和y坐标

我知道我可以遍历线列表,但我不知道如何构建一个算法来通过给定坐标(即鼠标单击)选择一条线。任何人有任何想法或指出我正确的方向吗?

// import java.awt.Point

public Line selectLine(Point mousePoint) {
for (Line l : getLines()) {
Point start = l.getStart();
Point end = l.getEnd();
if (canSelect(start, end, mousePoint)) {
return l; // found line!
}
}
return null; // could not find line at mousePoint
}

public boolean canSelect(Point start, Point end, Point selectAt) {
// How do I do this?
return false;
}

最佳答案

最好的方法是使用直线的相交方法。就像另一位用户提到的那样,您需要在他们点击的地方周围有一个缓冲区。因此,创建一个以鼠标坐标为中心的矩形,然后测试该矩形是否与您的线相交。这是一些应该可以工作的代码(没有编译器或任何东西,但应该很容易修改)

// Width and height of rectangular region around mouse
// pointer to use for hit detection on lines
private static final int HIT_BOX_SIZE = 2;



public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();

Line2D clickedLine = getClickedLine(x, y);
}


/**
* Returns the first line in the collection of lines that
* is close enough to where the user clicked, or null if
* no such line exists
*
*/

public Line2D getClickedLine(int x, int y) {
int boxX = x - HIT_BOX_SIZE / 2;
int boxY = y - HIT_BOX_SIZE / 2;

int width = HIT_BOX_SIZE;
int height = HIT_BOX_SIZE;

for (Line2D line : getLines()) {
if (line.intersects(boxX, boxY, width, height) {
return line;
}
}
return null;

关于java - 如何选择一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1797209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com