如何获得圆联合周长的点数组

Z4u*_*rce 5 c# opengl math geometry unity-game-engine

所以我知道一个圆的参数方程是:

x = cx + r * cos(a)
y = cy + r * sin(a)
Run Code Online (Sandbox Code Playgroud)

从这里可以很容易地从它的周长得到一个点......

但是,如果我想获得许多阵列点相交的圆的什么周长?像这样: 相交的圆圈

那么如何在坐标系中用包含(顶点,序列事项)的GL线绘制类似的圆形联合,如果我知道每个圆的中心和半径?

(如果你必须使用它的集体参数方程的参数来迭代它,以获得具有所需密度的每个顶点,那么最好.)

警告!结果只是一系列点(任何密度)与线相互连接(粗体黑色部分).不是多边形.形状没有填满.

(我想使用C#和GL.Lines在Unity3D中绘制它)

won*_*dra 4

既然你知道圆 c1:

\n\n
x1 = cx1 + r1 * cos(a)\ny1 = cy1 + r1 * sin(a)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且您想要附加条件点 P[x1,y1] \xe2\x88\x89 任何其他 C。\n只需生成所有圆(或在生成时检查条件)并删除所有更接近任何 Center[cx, cy] 的点然后是相应的圆半径 R。\n要计算距离(或更好的平方距离并与预先计算的平方 R 进行比较以提高性能),只需测量向量 P - 中心(毕达哥拉斯)的距离:

\n\n
foreach (Point p){\n foreach (other Circle c){\n float dist = (P - Center).Lenght;\n if (dist < c.R){\n  // point is not valid, remove\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个解决方案确实不是最佳的(如评论中所述)。\n其他方法是计算每个圆与其他圆的交集(https://math.stackexchange.com/questions/256100/how-can-i-find-the-两个圆相交的点)并删除这些点之间的范围(正确的一个 - 它开始变得复杂)。另外,如果您需要保持正确的顺序,则应该可以继续生成一个圆,直到到达交叉点 - 然后切换新圆等。但请注意:您需要从形状的外部开始!

\n