代码之家  ›  专栏  ›  技术社区  ›  Sergio P Z

如何单击多边形边界并将此点添加到多边形

  •  0
  • Sergio P Z  · 技术社区  · 8 年前

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

    是否有任何方法可以选择多边形的边界/笔划,并将此事件注册到PaintComponent之外?

    谢谢你的帮助

    2 回复  |  直到 8 年前
        1
  •  0
  •   Community Paul Sweatte    7 年前

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

    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)<应首选0.01’。

        2
  •  0
  •   martinez314    8 年前

    为了了解用户是否单击了绘制多边形边界上的某个点,需要计算单击的点与每个线段之间的距离。搜索“ point to line distance ".

    由于边缘从技术上讲是无限薄的(它不占面积),您需要测试点是否在边缘的某个小阈值距离内。