如何单击“多边形”边框并将此点添加到多边形

时间:2016-05-25 18:44:50

标签: java graphics awt polygon graphics2d

这是我在Stackoverflow中的第一个问题。 我在JAVA中为冒险游戏创建了一个IDE,我需要设置可步行区域。这个形状是一个多边形,我可以用他的顶点绘制,我可以添加新的点。问题是我无法检测鼠标位置是否仅在多边形的边界上。这是为了创建新的顶点而不会使形状变形。

是否存在以任何方式选择多边形的边框/笔划并将此事件注册到PaintComponent之外?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

为了了解用户是否沿着绘制多边形的边框单击了一个点,您需要计算点击点与每个线段之间的距离。搜索" point to line distance"。

由于边缘在技术上非常薄(它不占任何区域),因此您需要测试该点是否在边缘的某个小阈值距离内。

答案 1 :(得分:0)

你可以迭代多边形的点并确定你是否命中了一条线。

Polygon p; //your polygon
int x_mouse;//your mouse click pos
int y_mouse;
for (int i = 0; i < p.npoints; i ++){
    int x_from = 0;
    int y_from = 0;         
    int x_to = 0;
    int y_to = 0;

    if (i == 0){ //i-1 == -1 -> p.npoints-1
        x_from = p.xpoints[p.npoints-1];
        y_from = p.ypoints[p.npoints-1];
    }else{
        x_from = p.xpoints[i-1];
        y_from = p.ypoints[i-1];
    }       
    x_to = p.xpoints[i];
    y_to = p.ypoints[i];


    Line2D line = new Line2D.Double(x_from, y_from, x_to, y_to);
    if (line.ptLineDist(new Point(x_mouse, y_mouse)) <= 0.01){
        //you hit
    }

}

看看Java - Point on line,了解为什么'ptLineDist(p)&lt; 0.01'应该是首选。