java - 我怎么知道一组线对象是近似封闭区域?

标签 java android math computer-science computational-geometry

我正在制作一个绘图应用程序,用户可以在其中删除他们绘制的内容。

除了回溯他们接触过的地方之外,我试图找出他们如何删除的一种巧妙方法是删除他们指定的封闭区域。

用户故事将是:

 - 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/

相关文章:

java - 从根节点到所有子节点的 n-Tree 遍历

android - 如何加速 ffmpeg-x264 编码器操作

Android Flat ActionBar(无阴影)

java - 如何在Java中计算整数表达式

javascript - 分配具有不同余数的 JavaScript 数字

java - 求两条曲线之间的面积(每条曲线由一组点组成)

java - 在 print 语句中使用问号 if 条件

java - JVM 的 SurvivorRatio 标志不起作用?

android - 从 ORDERBY 和 GROUPBY 函数无法正常工作的表中选择前 5 个值

Java 客户端和 Erlang 服务器?