java 如何使用 path2d 绘制多边形并查看点是否在其区域内?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12152486/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I draw a polygon using path2d and see if a point is within it's area?
提问by B. TIger
I,m trying to draw a polygon shape of any kind using multiple vertices with path2d and I want to later on see if a determinate point is within its area using java.awt.geom.Area
我正在尝试使用带有 path2d 的多个顶点绘制任何类型的多边形形状,我想稍后使用 java.awt.geom.Area 查看确定点是否在其区域内
public static boolean is insideRegion(Region region, Coordinate coord){
Geopoint lastGeopoint = null;
GeoPoint firstGeopoint = null;
final Path2D boundary = new Path2D.Double();
for(GeoPoint geoponto : region.getGeoPoints()){
if(firstGeopoint == null) firstGeopoint = geoponto;
if(lastGeopoint != null){
boundary.moveTo(lastGeopoint.getLatitude(),lastGeopoint.getLongitude());
boundary.lineTo(geoponto.getLatitude(),geoponto.getLongitude());
}
lastGeopoint = geoponto;
}
boundary.moveTo(lastGeopoint.getLatitude(),lastGeopoint.getLongitude());
boundary.lineTo(firstGeopoint.getLatitude(),firstGeopoint.getLongitude());
final Area area = new Area(boundary);
Point2D point = new Point2D.Double(coord.getLatitude(),coord.getLongitude());
if (area.contains(point)) {
return true;
}
return false
}
回答by MadProgrammer
So I put together this really quick test.
所以我把这个非常快速的测试放在一起。
public class Poly extends JPanel {
private Path2D prettyPoly;
public Poly() {
prettyPoly = new Path2D.Double();
boolean isFirst = true;
for (int points = 0; points < (int)Math.round(Math.random() * 100); points++) {
double x = Math.random() * 300;
double y = Math.random() * 300;
if (isFirst) {
prettyPoly.moveTo(x, y);
isFirst = false;
} else {
prettyPoly.lineTo(x, y);
}
}
prettyPoly.closePath();
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
System.out.println(prettyPoly.contains(p));
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.draw(prettyPoly);
g2d.dispose();
}
}
This generates a random number of points at random locations.
这会在随机位置生成随机数量的点。
It then uses the mouse click to determine if the mouse click falls within that shape
然后它使用鼠标点击来确定鼠标点击是否属于该形状
UPDATED
更新
(Note, I changed the g2d.draw
to g2d.fill
to make it easier to see the content area)
(注意,我更改了g2d.draw
以g2d.fill
更容易查看内容区域)
Note, everything in red returns "true", everything else returns "false"...
请注意,红色的所有内容都返回“true”,其他所有内容都返回“false”...