Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 有没有一个简单的算法可以找到几个圆的包络线?_Geometry - Fatal编程技术网

Geometry 有没有一个简单的算法可以找到几个圆的包络线?

Geometry 有没有一个简单的算法可以找到几个圆的包络线?,geometry,Geometry,给定二维表面上的许多点和这些点的半径,我可以很容易地为它们画圆。我需要的是一个算法,只画信封(我要找的是正确的词?)或这些组合圆的外边界。此外,第二组圆可以“侵入”这些圆,从而形成一种“边界” 您可以分两步绘制 1) 使用以下方法绘制轮廓:对于每个点,使用您最喜欢的圆绘制方法绘制一个圆,但在绘制像素之前,请确保它不包含在任何其他圆内。对每一点都这样做,你就会得到你的提纲 2) 使用以下方法绘制不同集合之间的边界:对于不同集合中的每对点,计算圆的两个交点。如果存在交点,则可以将边界绘制为连接这两点

给定二维表面上的许多点和这些点的半径,我可以很容易地为它们画圆。我需要的是一个算法,只画信封(我要找的是正确的词?)或这些组合圆的外边界。此外,第二组圆可以“侵入”这些圆,从而形成一种“边界”


您可以分两步绘制

1) 使用以下方法绘制轮廓:对于每个点,使用您最喜欢的圆绘制方法绘制一个圆,但在绘制像素之前,请确保它不包含在任何其他圆内。对每一点都这样做,你就会得到你的提纲


2) 使用以下方法绘制不同集合之间的边界:对于不同集合中的每对点,计算圆的两个交点。如果存在交点,则可以将边界绘制为连接这两点的线段。但是,您必须绘制两条线,一条用于圆A,另一条用于圆B。要绘制圆A的线,请稍微将线段向点A偏移。然后,使用您最喜欢的线绘制方法,但在绘制像素之前,请确保它更靠近点A,而不是相反集合的任何其他点。画完线后,重复圆B的过程。注意,由于不同集合的点不对称,不能保证两个线段的长度相同。但是,当绘制所有轮廓和边框时,它将始终形成闭合形状。

绘制磁盘并集轮廓的快速方法是

  • 用黄色填充所有磁盘,然后

  • 用较小的半径将所有磁盘填充为白色

只要您只填充磁盘的其余部分,就可以对“侵占”的圆进行调整。不幸的是,在一般情况下,寻找剩余部分可能是一个不容易解决的几何问题


有一种替代方法可以在所有情况下工作:

  • 用零填充图像,然后对于所有磁盘,用到圆周的距离值(中心最大值)填充每个像素,但只保留到目前为止的最大值

  • 执行此操作时,请使用达到该最高值的磁盘的颜色填充第二个图像。(使用背景色初始化图像。)

在该过程结束时,第一幅图像将表示由相交圆锥体构成的“地形”;对于地形的每个点,你都会知道颜色

  • 最后,使用颜色贴图为高度小于所需笔划宽度的像素着色
您没有指定“侵入”的工作方式。