gpt4 book ai didi

c# - 如何获得圆并集圆周的一系列点

转载 作者:太空狗 更新时间:2023-10-29 22:37:32 24 4
gpt4 key购买 nike

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

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

由此很容易从它的圆周得到一个点...

但是如果我想获取多个相交圆的周长的数组点怎么办?像这样: Intersected circles

那么,如果我知道每个圆的中心和半径,那么如何在坐标系中使用包含(顶点,序列很重要)的 GL 线绘制相似的圆并集?

(最好是,如果您必须使用它的集体参数方程的参数对其进行迭代,以获得具有所需密度的每个顶点。)

警告!结果只是一组点(任何密度)与线相连,因为它们彼此跟随(粗体黑色部分)。不是多边形。形状未填充。

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

最佳答案

既然你知道 Circle c1:

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

并且你想要额外的条件点 P[x1,y1] ∉ 任何其他 C。只需生成所有圆(或在生成时检查条件)并删除所有更接近任何 Center[cx, cy] 然后相应圆半径 R 的点。要计算距离(或更好的平方距离并与预先计算的平方 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)并删除这些点之间的 RANGE(右边的一个 - 它开始变得复杂)。此外,如果您需要保持正确的顺序,应该可以继续生成一个圆圈,直到您到达一个十字路口 - 然后切换新的圆圈等。不过要小心:您需要从形状的外部开始!

关于c# - 如何获得圆并集圆周的一系列点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21259903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com