- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要计算二维平面中两个三角形重叠区域的面积。奇怪的是,我写了code对于 triangle-circle problem ,而且效果很好,很稳健,但我在三角形-三角形问题上遇到了麻烦。
我已经首先检查一个是否完全包含另一个,或者另一个是否包含第一个,以及获取所有的边缘交叉点。这些交点(最多 6 个,如大卫之星)与包含在另一个三角形内的三角形顶点相结合,就是相交区域的顶点。这些点必须形成一个凸多边形。
我寻求的解决方案是以下任一问题的答案:
对于问题 1,我考虑过简单地将所有可能的三角形的所有面积相加,然后除以重数进行计数,但这似乎很愚蠢,我不确定它是否正确。我觉得有某种扫描线算法可以解决问题。但是,解决方案还必须在数值上相对稳健。
我根本不知道如何解决问题 2,但一般答案会非常有用,提供代码会让我开心。这将允许直接计算凸多边形的交叉区域,而不必对其执行三角形分解。
编辑:我知道this article它描述了寻找两个凸多边形的交点多边形的一般情况。它似乎只涉及三角形,而且,我真的不需要生成的多边形本身。所以也许这个问题只是在此时懒惰地问。
最佳答案
问题一:为什么点的顺序是随机的?如果是,则必须对它们进行排序,以便用直线连接连续的点会产生一个凸多边形。如何对它们进行排序——例如,通过运行凸包算法(尽管可能还有更简单的方法)。一旦您订购了它们,请按照描述计算面积 here .
--
问题2比较简单。半平面由具有隐式方程 a*x+b*y+c=0
的单条线定义; a*x+b*y+c <= 0
的所有点 (x, y) (注意不等式)在半平面“后面”。现在,您至少需要三个平面,以便它们的负半空间的交点闭合(这是必要条件,但不是充分条件)。如果相交是封闭的,它将是一个凸多边形。
我建议你维护一个顶点链表。该算法用三行初始化。计算线相交的三个点(一般情况下);这些是您所在区域(三角形)的起始顶点。您还必须检查每个顶点是否位于通过其他两个顶点的线所定义的半平面“后面”;这保证了交叉点实际上是一个封闭区域。
这三个顶点也定义了三角形的三个边。当你与一个新的半平面相交时,只需检查定义半平面的线与当前区域的每条边之间的交点;通常你会得到两个交点,但你必须注意直线穿过区域顶点的退化情况。 (你也可以得到一个空集!)
新的交叉点定义了一条线,将当前区域分成两个区域。同样,使用新半平面的方向来决定将两个新区域中的哪一个分配给新的“当前区域”,以及丢弃哪一个。
定义当前区域边缘的列表中的点将正确排序,因此您可以应用上述链接中的公式来计算其面积。
如果这个描述不够详细/难以理解,我可以给你的次佳建议是你投资一本关于计算几何和线性代数的书。
关于algorithm - 两个三角形的交集面积,或一组半平面,或凸点集的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074371/
我正在开发一个企业名录网站,其搜索将由 Google map 驱动。用户将能够根据各种标准搜索他们所在地区的企业,但主要的想法是,如果您搜索例如“新泽西州的水管工”,您将获得新泽西州所有水管工的结果。
我得到了一条任意形状的曲线,包围了一些区域。 我想估计曲线在 iPhone/iPad 屏幕上包围的像素数。我该怎么做? 曲线被定义为点的连续 x/y 坐标。 闭合曲线。 通过用户的触摸(touches
我想删除 R 在点阵图周围的默认边距。这意味着我想摆脱红色矩形之外的所有空白。这是示例: library (raster) library(rasterVis) f <- system.file("e
无法找到任何直接的解决方案来计算 GMSPolygon 对象面积。有什么方法可以做到这一点,或者我必须用边长和一些数学计算来计算它? 最佳答案 感谢@Larme; GMSGeometryArea 就是
假设例如我想将标准正态分布的密度曲线下方的面积着色为十分。我希望最左边 10% 的区域具有与接下来的 10% 不同的阴影,依此类推。 这是问题“Shading a kernel density plo
我正在为 Extjs 开发一个混合图表组件,并且曲线太尖锐了。我找不到曲线具有半径的配置。如果你处理过类似的事情,你能提供一些方法让我的曲线变得平滑一点吗?这是我的代码: Ext.define('Ex
上下文 我有一个 3D 对象,我有它的坐标。然后我将对象旋转 n 次,当对象投影到网格上时,我想计算对象的 2D 面积(以纳米为单位)。 例如, 我在下面有一张图片描述了我的问题。我有相同的对象,但在
当我知道我需要的地 block 总数并且我希望排列是一个正方形(可能有一些空的子地 block )时,我正在尝试弄清楚如何计算子地 block 尺寸。 例如,如果我需要 22 个子图,那么我会为总共
我是一名数据科学家。主要使用Python和SQL来编写代码。我使用data studio进行可视化。所以我对JS不熟悉。我的诀窍data studio community visualizations
我有 1797 张 Mnist 图像,为此我需要提取两个特征(FilledArea、EulerNumber)。我知道如何在 Matlab 中做到这一点。我的特征矩阵在 Matlab 中具有(并且是正确
我希望能够在 Google map 上绘制形状(圆形、多边形和矩形),但我想限制可以绘制的形状的大小(面积)。因此,以圆圈为例,期望的行为是当用户开始从 map 上的某个点拖动鼠标以形成圆圈时,圆圈会
我是一名优秀的程序员,十分优秀!