我正在制作一个绘图应用程序,用户可以在其中删除他们绘制的内容。
除了回溯他们接触过的地方之外,我试图找出他们如何删除的一种巧妙方法是删除他们指定的封闭区域。
用户故事将是:
- user would draw something that resembles an enclosed area - If it is an enclosed area, mark the area as ready to delete - User clicks on delete - the pixels inside the region are written with the delete color
我在其他绘图应用程序中看到过这样做。数学不是我的专业领域。我什至不知道去哪里寻找这个答案。
该应用程序已经能够在位图上绘制 Line()
最佳答案
因此,从评论中修改后的问题来看:“给定一系列线段,其中每条线段从前一条线段的终点开始,这些线是否(大致)形成一个封闭的多边形?”这应该不会太难。
只需取第一段的头部并将其与最后一段的尾部进行比较。如果它们足够靠近,则这些线段大致形成一个封闭的(可能自相交的)多边形。
所以如果你有n
由点序列形成的线段 p_0,...,p_n
,你可以考虑 p_0
之间的欧氏距离和 p_n
.思路如下:
if dist(p_0,p_n) < THRESHOLD
create a new segment [p_n,p_0] closing off the polygon
delete pixels in the enclosed region
dist(p_0,p_n)
可以实现为 sqrt((p_0x - p_nx)^2 + (p_0y - p_ny)^2)
.变量 THRESHOLD
将是一些常量,用于确定您希望在第一点和最后一点之间容忍多少误差。
关于java - 我怎么知道一组线对象是近似封闭区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992393/