C#在三维网格空间中,从中心(x,y,z)到最外层(x,y,z)绘制完美球体

C#在三维网格空间中,从中心(x,y,z)到最外层(x,y,z)绘制完美球体,c#,math,3d,geometry,C#,Math,3d,Geometry,我有以下变量的值:: x0,y0,z0=第一个选择的坐标(拟为圆心) x1,y1,z1=第二个选择的坐标(拟作为球体的最外面点) ishollow=表示球体是否应为空心的布尔值 结果必须尽可能画出一个完美的球体。以下是一个例子: 三维空间为100x100x100 首先选择点50,50,50(即x0=50;y0=50,z0=50) 第二个选择点76,67,84(即x1=76;y1=67,z1=84) 绘制球体时,第一个点为圆心,第二个点为球体中任何点距圆心的最大距离 球体必须由使用函数markp

我有以下变量的值::

x0,y0,z0=第一个选择的坐标(拟为圆心)

x1,y1,z1=第二个选择的坐标(拟作为球体的最外面点)

ishollow=表示球体是否应为空心的布尔值

结果必须尽可能画出一个完美的球体。以下是一个例子:

  • 三维空间为100x100x100
  • 首先选择点50,50,50(即x0=50;y0=50,z0=50)
  • 第二个选择点76,67,84(即x1=76;y1=67,z1=84)
  • 绘制球体时,第一个点为圆心,第二个点为球体中任何点距圆心的最大距离
  • 球体必须由使用函数markpointt(x、y、z、hollowmark)绘制的点组成
  • 如果ishollow=true,则球体必须为空。要使其为空,我需要指定hollowmark是否为真,如果为真,则仍需要放置该点,但该点会用黑色点覆盖任何现有点

我不知道从哪里开始,你能告诉我如何识别编码这样一个过程的数学函数吗?提前感谢您的帮助。

点间距离=球体半径


(中心位置)和(球体半径)是您所需要的全部。如果点到圆心的距离小于半径,则可以检查点是否在球体内。

必须计算的第一个量是球体的半径。这很简单,使用符号
radius=sqrt((x1-x0)^2+(y1-yo)^2+(z1-z0)^2)

接下来,要在整个球体中“着色”,只需在
100x100x100
空间中的每个体素中循环,并测试它是否在球体内,相应地着色即可。有很多方法可以提高此操作的效率,例如,您可以先找出球体的轴对齐边界框,然后仅迭代该框中的点。你可以在一个八分之一的空间中进行所有的计算,然后在其他八分之一的空间中使用反射来着色

绘制一个空心球体将更具挑战性,通常,球体的半径将是实数,而不是整数,因此在中心周围不会有一个很好的单体素厚的体素壳。相反,朴素的est算法(测试体素是否正好位于球体中心的指定距离)可能导致壳中不包含体素。在测试中,必须允许对体素是否在壳内、壳内或壳外有一定的容差。我希望您会发现定义公差是相当棘手的,这样您在任何点上都不会有两个体素厚的壳,而在其他点上则不会有零个体素厚的壳


如果你觉得这一切的概念化有点令人费解,在处理第三维度之前,先在2D中画一个圆

似乎你希望为自己编写代码,而不是让别人帮你编写代码。我更想了解这背后的数学原理,这就是为什么除了问题的标题之外,我没有包括任何其他代码参考。我确信我需要进行的计算有一个名称,但由于不知道正确的术语,我遇到了缺乏相关搜索引擎结果的情况。只要知道方向,我就可以走这条路。你已经列出了一系列要求。我看这里没有问题。问题是什么?我已经更新了这个,所以这个问题不再只是暗示。谢谢,这正是我想要的,你的解释让我能理解。