相关疑难解决方法(0)

检测数组中作为复杂多边形顶点的一组点是以顺时针还是逆时针顺序定义的?

编辑:我用答案更新了程序,效果很好!

我正在制作一个程序(随意尝试),让用户绘制多边形,然后进行三角测量.他们可以单击添加顶点并按Enter键进行三角测量.无论如何,算法工作正常,只要我告诉它是否以顺时针或逆时针方式绘制点(现在我将它设置为仅与顺时针多边形一起工作).我一直试图弄清楚这几天,但不知道如何确定点是顺时针还是逆时针.尝试使用前面提到的程序绘制形状以获得更好的想法,您可以更好地体验我所说的内容,而不是尝试解释它.

以下是点的定义方式:

function Point(x, y) {
    this.x = x;
    this.y = y;
}

var vertices = [];

// Called on click
function addPoint(mouseX, mouseY) {
    vertices.push(new Point(mouseX, mouseY));
}
Run Code Online (Sandbox Code Playgroud)

这是一个顺时针多边形的图像:

顺时针多边形

这是逆时针多边形的图像:

逆时针多边形

如果你能帮我弄清楚如何确定积分的"顺时针方向",我将非常感激!

javascript arrays math geometry 2d

16
推荐指数
1
解决办法
3259
查看次数

Python:从xyz坐标中查找多边形区域

我正在尝试使用该shapely.geometry.Polygon模块来查找多边形区域,但它会在xy平面上执行所有计算.这对我的一些多边形来说很好,但是其他的也有一个z维度,所以它不是我想做的.

是否有一个包可以从xyz坐标给我一个平面多边形的区域,或者一个包或算法将多边形旋转到xy平面,以便我可以使用shapely.geometry.Polygon().area

多边形表示为表单中的元组列表[(x1,y1,z1),(x2,y2,z3),...(xn,yn,zn)].

python 3d polygon area

11
推荐指数
2
解决办法
2万
查看次数

样条曲面插值

假设我有n个定义z轴表面的点

f(x1,y1) = 10
f(x2,y2) = 12
f(x3,y3) = 5
f(x4,y4) = 2
...
f(xn,yn) = 21
Run Code Online (Sandbox Code Playgroud)

现在我希望能够近似f(x,y).我正在寻找一种线性算法,尤其是样条逼近算法.一个示例算法或至少一些指针会很棒.

algorithm math 3d spline

8
推荐指数
1
解决办法
4328
查看次数

使用 icomoon 从 svg Figma 图标生成字体时自动填充颜色

我想使用icomoon 应用程序将 svg 转换为HTML/CSS 中的图标字体元素

<svg width="325" height="350" viewBox="0 0 325 350" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M205.43 59.38C205.43 26.5853 232.015 0 264.81 0C297.605 0 324.19 26.5853 324.19 59.38C324.19 92.1747 297.605 118.76 264.81 118.76C246.525 118.76 230.17 110.495 219.277 97.4975L116.536 157.274C117.985 162.41 118.76 167.83 118.76 173.43C118.76 178.348 118.162 183.127 117.035 187.697L222.002 248.758C232.806 237.522 247.991 230.53 264.81 230.53C297.605 230.53 324.19 257.115 324.19 289.91C324.19 322.705 297.605 349.29 264.81 349.29C232.015 349.29 205.43 322.705 205.43 289.91C205.43 280.791 207.486 272.152 211.159 264.431L109.497 205.292C98.9566 221.836 …
Run Code Online (Sandbox Code Playgroud)

fonts svg icomoon

7
推荐指数
1
解决办法
1582
查看次数

如何用线切割简单的多边形

我有一个简单的多边形(凸面或凹面,但没有孔),我需要切割成具有线段的部分.我不确定如何实际确定切片后多少个多边形结果,或者如何对顶点进行分组.

基本凸面情况总是导致2个子多边形很容易,但我如何处理复杂的凹形?以"E"形多边形为例.垂直切片可以产生4个多边形.如何确定哪些顶点构成每个子多边形?

定义多边形:我有两个选择.我的多边形可以是有序的顶点列表,也可以是三角形数组.我更喜欢使用三角形数组的解决方案.循环遍历每个三角形并且如果它们相交则用线切割它应该非常容易.但后来我不知道如何将这些三角形分组为产生的子多边形.

伪代码甚至一般建议都是好的; C#实现是理想的.

geometry polygon line slice computational-geometry

6
推荐指数
2
解决办法
4019
查看次数

计算多面体体积的通用公式

给定顶点列表(v),连接顶点(e)的边列表以及连接边()的曲面列表s,如何计算多面体的体积?

math

5
推荐指数
1
解决办法
8597
查看次数

在无向图内查找多边形

请参阅图片:http//i.stack.imgur.com/NPUmR.jpg

我有一个无向图,其中包含一个或多个连接的子图。该图由一组连接的顶点的有序对定义。最多可能有300个顶点。该图是平面的。

我需要识别图像中所示的多边形。每个单独的多边形中的彩色区域。粗略的试探法可能是,多边形是图形中封闭边缘环(循环)之间的“封闭区域”。在类似的帖子中已经建议可以使用“深度优先”遍历并标记访问的顶点来标识周期。

但是,我不确定在此之后如何进行操作以获取所需的输出,如图中所示。

要求 :

i)多边形不得重叠或相交。即:循环ABFHDCA不是有效的多边形,因为它将与多边形FHGE重叠。循环ABFEGHDCA是有效的多边形。

ii)多边形可以具有3个或更多的边,并且多边形必须以图形的边为边界。XYZ是有效的多边形,尽管与图的其余顶点断开了连接。

iii)诸如K和L(即叶子)之类的顶点不构成多边形的一部分。我们不在乎边缘JK。

更新: iv)在图中,边不交叉。两条边只能相交的地方是顶点。通过前一阶段/算法可以保证确实如此。

问题:

  1. 我是否在使用DF纵行寻找轨道方法的正确轨道上?在这种情况下,DF遍历会给我提供我需要考虑的所有(简单)循环吗,尤其是在XYZ与图的其余部分断开连接的情况下?

  2. 是否存在解决此问题的替代算法?

附加条款:

a)我在用更具体的计算几何术语来定义此问题时遇到了麻烦,因此坚持在无向图内查找多边形。我必须承认,自从学习图论以来已经有好几年了。我现在正在整理。

b)对此的解决方案似乎不是凹/凸包算法。我们正在谈论的是一组相连的边-真正的多边形,而不仅仅是需要包含的点云。

c)上面的示例是我可以在短时间内提出的。我认为它涵盖了大多数“边缘”情况(双关语):)

类似解决方案

  1. 我发现了类似的帖子,但是被接受的解决方案似乎无法为该示例生成正确的周期。

提前致谢!

graph-theory polygons computational-geometry

5
推荐指数
1
解决办法
3623
查看次数

检测2种不同的多边形自相交情况(相交发生在内部或外部)

我正在编写一种算法,将复杂(自相交)多边形拆分为一个或多个简单多边形,以便它们可以用于我的碰撞检测算法。这可以通过添加/删除顶点和创建新多边形来完成。

为此,我检测多边形中的所有线段交叉点,并按较低的交叉点 x 对它们进行排序,然后按顺序处理每个线段交叉点。但是,可能会发生两种类型的交集,我需要根据发生的类型对多边形进行不同的分割。以下是两种可能情况的说明:

在此处输入图片说明

我已经知道我应该如何处理每种交叉点类型,但我不知道如何检测给定的交叉点对应于情况 1 还是情况 2。有没有办法确定这一点?我拥有算法中所需的所有信息(顶点及其顺序、交叉点和导致它们的线段,......)。

假设在点 Q 处,段 (P_i, P_i+1) 和 (P_j, P_j+1) 之间存在交集,j>i。

案例 1:我将多边形分成 2 个多边形,[Q, P_i+1, ..., P_j , Q] 和 [Q, P_j+1, ..., P_i, Q]。

情况2:我在多边形中插入一个顶点V,得到的多边形为[P1, ..., P_i, V, P_i+1, ..., P_j, Q, P_j+1, ..., P1]

所以我需要的缺失信息是弄清楚由 [Q, P_i+1, ..., P_j] 形成的循环是“外部”循环(案例 1)还是“内部”循环(案例 2) .

我已经阅读了有关由循环形成的多边形的有符号区域的内容,但并没有完全理解。我不是在寻找最有效的算法,只是寻找一种可行的算法。谢谢!

algorithm geometry polygon

5
推荐指数
1
解决办法
1010
查看次数

最快的鞋带配方方法

我做了一个用鞋带方式计算面积多边形的函数。

这非常有效,但现在我想知道是否没有更快的方法来获得相同的结果。我想知道这一点,因为这个函数对于具有大量坐标的多边形必须运行得更快。

我的职能:

def shoelace_formula(polygonBoundary, absoluteValue = True):
    nbCoordinates = len(polygonBoundary)
    nbSegment = nbCoordinates - 1

    l = [(polygonBoundary[i+1][0] - polygonBoundary[i][0]) * (polygonBoundary[i+1][1] + polygonBoundary[i][1]) for i in xrange(nbSegment)]

    if absoluteValue:
        return abs(sum(l) / 2.)
    else:
        return sum(l) / 2.
Run Code Online (Sandbox Code Playgroud)

我的多边形:

polygonBoundary = ((5, 0), (6, 4), (4, 5), (1, 5), (1, 0))
Run Code Online (Sandbox Code Playgroud)

结果 :

22.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我尝试使用 Numpy :它速度最快,但您必须先转换坐标。

import numpy as np
x, y = zip(*polygonBoundary)

def shoelace_formula_3(x, y, absoluteValue = True):

    result = 0.5 * np.array(np.dot(x, np.roll(y, …
Run Code Online (Sandbox Code Playgroud)

python performance polygon area

4
推荐指数
1
解决办法
1万
查看次数

多边形顶点 - 顺时针或逆时针

我遇到了这个链接http://www.mathopenref.com/coordpolygonarea2.html

它解释了如何计算多边形的面积,并帮助确定我们输入的多边形顶点是顺时针还是逆时针.

如果面积值为+ ve,则为顺时针,如果为-nv,则为逆时针.

我的要求是仅确定它是顺时针还是逆时针.此规则是否正常工作(尽管链接中提到了一些限制).我只有正多边形(不复杂,没有自交叉),但顶点更多.

我对面积值精度不感兴趣,只是为了知道环的旋转.

对此有任何其他想法.

geospatial computational-geometry

2
推荐指数
2
解决办法
6259
查看次数

如何绘制复杂的多边形?

我正在从GIS数据库中读取数据并使用mpl_toolkits.basemap和matplotlib创建地图.一些数据创建复杂的多边形(由外部和内部环定义).但是,我无法追踪如何创建带孔的多边形.matplotlib甚至可以实现这一点吗?还有另一种创建此图像的方法吗?

python matplotlib

1
推荐指数
2
解决办法
3191
查看次数