Graphics 垂直于圆锥体的曲面

Graphics 垂直于圆锥体的曲面,graphics,Graphics,我正在用OpenGL/C++编写一个程序来光线追踪一个圆锥体。为了计算强度,我需要知道曲面法线。给定一个底半径、高度和中心坐标,我如何计算曲面法线?我假设你需要找到曲面上给定点的曲面法线。我进一步假设这是一个圆锥体,其方向是底部朝下(-y轴),圆锥体的点朝上(+y轴)。如果这些条件中的任何一个不符合,我可以编辑我的答案以适合您的情况 让我们把你在曲面上的点叫做p,中心坐标C,半径r,高度h,法线N 所有的点和向量都有三个分量(x,y,z),所以我将使用“.”来引用它们。例如,P.x是P的x分量

我正在用OpenGL/C++编写一个程序来光线追踪一个圆锥体。为了计算强度,我需要知道曲面法线。给定一个底半径、高度和中心坐标,我如何计算曲面法线?

我假设你需要找到曲面上给定点的曲面法线。我进一步假设这是一个圆锥体,其方向是底部朝下(-y轴),圆锥体的点朝上(+y轴)。如果这些条件中的任何一个不符合,我可以编辑我的答案以适合您的情况

让我们把你在曲面上的点叫做p,中心坐标C,半径r,高度h,法线N

所有的点和向量都有三个分量(x,y,z),所以我将使用“.”来引用它们。例如,P.x是P的x分量

首先,我们需要一个单位向量投影到x/z平面上,该平面从C指向p

V.x=p.x-C.x

V.y=0

V.z=p.z-C.z

该向量的方向正确,但大小大于1。它还不是单位向量,所以我们必须相应地缩放它

m=sqrt(V.x2+V.z2)

m现在是V的大小,我们将使用它来缩放V

V.x/=m

V.z/=m

找到法线的最终计算是

N.x=V.x*h/r

N.y=r/h


N.z=V.z*h/r

我假设你需要找到曲面上给定点的法线。我进一步假设这是一个圆锥体,其方向是底部朝下(-y轴),圆锥体的点朝上(+y轴)。如果这些条件中的任何一个不符合,我可以编辑我的答案以适合您的情况

让我们把你在曲面上的点叫做p,中心坐标C,半径r,高度h,法线N

所有的点和向量都有三个分量(x,y,z),所以我将使用“.”来引用它们。例如,P.x是P的x分量

首先,我们需要一个单位向量投影到x/z平面上,该平面从C指向p

V.x=p.x-C.x

V.y=0

V.z=p.z-C.z

该向量的方向正确,但大小大于1。它还不是单位向量,所以我们必须相应地缩放它

m=sqrt(V.x2+V.z2)

m现在是V的大小,我们将使用它来缩放V

V.x/=m

V.z/=m

找到法线的最终计算是

N.x=V.x*h/r

N.y=r/h


N.z=V.z*h/r

如果圆锥体朝下,且有一个开口角度(α),则以h为底(+z)。您可以在con顶部选择您的co系统。这意味着圆锥体在尖头部分是平衡的

在这种情况下,可以导出该曲面法线分量的一般表达式

步骤1:

表示法向i球坐标(e_r,e_θ,e_φ),其中所有分量都是单位向量,θ定义为方位角

结果-->e_uθ(θ==α,φ)

如果你使用som,这个形状的其他属性,如磁化强度M或电通量。我们可以很容易地转换这个i柱坐标

步骤2:


e_uθ==-sin(θ)e_z+cos(θ)e_s(φ)那里θ==α。

如果你的圆锥体朝下,并且有一个开口角(α),以h为底(+z)。您可以在con顶部选择您的co系统。这意味着圆锥体在尖头部分是平衡的

在这种情况下,可以导出该曲面法线分量的一般表达式

步骤1:

表示法向i球坐标(e_r,e_θ,e_φ),其中所有分量都是单位向量,θ定义为方位角

结果-->e_uθ(θ==α,φ)

如果你使用som,这个形状的其他属性,如磁化强度M或电通量。我们可以很容易地转换这个i柱坐标

步骤2:


e_θ==-sin(θ)e_z+cos(θ)e_s(φ)那里θ==α。

我有答案,我会给你写出来,等几分钟:)我有答案,我会给你写出来,等几分钟:)