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

x = cx + r * cos(a)
y = cy + r * sin(a)

从这个很容易得到一个点从它的周长…
但是如果我想得到许多相交圆圆周的阵列点呢?
这样地:
那么,如果我知道每个圆的中心和半径,我如何用坐标系中包含点(顶点、顺序问题)的gl线绘制类似的圆并?
(最好的方法是使用它的参数方程参数遍历它,以获得每个顶点所需的密度。)
警告!结果只是一个点数组(任何密度),当它们彼此跟随时,与线相连(粗体黑色部分)。不是多边形。形状未填充。
(我想用c和gl.lines在unity3d中绘制它)

最佳答案

既然你知道C1圈:

x1 = cx1 + r1 * cos(a)
y1 = cy1 + r1 * sin(a)

你需要附加条件点p[x1,y1]任何其他c。
只需生成所有圆(或在生成时检查条件),并删除所有靠近中心[cx,cy]的点,然后删除相应的圆半径r。
要计算ditance(或更好的平方距离,并与预先计算的平方r进行比较以提高性能),只需测量向量p-中心的距离(毕达哥拉斯):
foreach (Point p){
 foreach (other Circle c){
 float dist = (P - Center).Lenght;
 if (dist < c.R){
  // point is not valid, remove
 }
 }
}

这个解决方案并不是最佳的(如评论中提到的)。
另一种方法是计算每个圆与其他圆的交集(https://math.stackexchange.com/questions/256100/how-can-i-find-the-points-at-which-two-circles-intersect),并删除这些点之间的距离(右边的一个ofc-它开始变得复杂)。此外,如果你需要保持正确的顺序,应该可以继续生成一个圆,直到你达到一个交叉点-然后切换圆为新的一个等小心:你将需要开始在形状之外!

07-24 22:35