所以我知道一个圆的参数方程是:
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-它开始变得复杂)。此外,如果你需要保持正确的顺序,应该可以继续生成一个圆,直到你达到一个交叉点-然后切换圆为新的一个等小心:你将需要开始在形状之外!