三维几何图形创作方法(Geometry3D)之三

本文详细介绍了如何使用正等测投影来绘制三维图形,包括圆台、圆锥、圆柱和球的投影变换公式,以及椭球的特殊情形。通过这些变换,可以在二维平面上呈现三维图形的精确形状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           本文所讲的内容已经开源,你可以在 这里 找到源代码。 


        前面我们介绍了三维图形的轴测投影画法,以及使用斜二测图画常见的三维多面体。本文介绍使用正等测图画常见的三维带圆弧的图形。

圆台

        在圆柱、圆锥、圆台中,我们从圆台开始,因为圆柱、圆锥其实是圆台的一种特例。

        这里,我们规定圆台上下两个面的半径(r,R)存在固定的比例,比如(r = R * 0.5)。

        在输入的两点 A、B 中,我们以 A 点作为小圆的圆心,规定 B 点作为大圆最右(左)侧点,假设圆台高为 h,那么显然有:

R = abs(x_{B} - x_{A})

h = abs(y_{B} - y_{A})

        那么,三维空间的圆,映射到二维平面,应该是什么图形呢?

        根据正等测投影变换,有:

\begin{bmatrix} -\sqrt{2}/2 & \sqrt{2}/2 & 0 \\ \sqrt{6}/6 & \sqrt{6}/6 & -\sqrt{6}/3 \end{bmatrix} * \begin{bmatrix} x \\ y \\ 0 \end{bmatrix} = \begin{bmatrix} X \\ Y \end{bmatrix}

        这里 (X,Y) 是圆的二维映射上的点坐标,所以有:

                \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} \sqrt{6} /2 * Y - \sqrt{2} /2 * X \\ \sqrt{6} /2 * Y + \sqrt{2} /2 * X \end{bmatrix}

        对于平行于x、y 平面的圆,有 x^{2} + y^{2} = r^{2},所以: 

                x^{2} + y^{2} = X^{2} + 3Y^{2} = r^{2}

        所以在正等测投影变换下,平行于x、y 平面的圆的二维映射是一个椭圆,且其长轴(平行于 x 轴)半径与圆的半径 r 相等,短轴半径为 r / \sqrt{3}

圆锥

        当圆台上下两个面的半径(r,R)的比例为 0 时,即 r = 0 时,就变成圆锥。此时,小圆退化为一个顶点,。其他计算完成沿用圆台的过程就行了。

圆柱

        圆柱则更简单,将圆台上下两个面的半径(r,R)的比例设置为 1 即可。

        在输入的两点 A、B 中,我们以 A 点作为球心,两点距离作为半径(依据在下面说明)。

        在画球时,实际上是是画了三个圆心、半径都一样的圆。

        在上面我们已经证明 x,y 平面的圆(用平面 z = 0 切球),其正等测投影是一个椭圆。

        我们再取平面x + y + z = 0,用这个面切取球形成的圆,我们来看看它的正等测投影是什么?

          结合投影变换、球方程:

    \begin{bmatrix} -\sqrt{2}/2 & \sqrt{2}/2 & 0 \\ \sqrt{6}/6 & \sqrt{6}/6 & -\sqrt{6}/3 \end{bmatrix} * \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} X \\ Y \end{bmatrix}

x^{2} + y^{2} + z^{2} = r^{2}

        去掉 z,则:

\begin{bmatrix} \sqrt{2} & 0 \\ 0 & \sqrt{6} \end{bmatrix} * \begin{bmatrix} y - x \\ y + x \end{bmatrix} = \begin{bmatrix} 2X \\ 2Y \end{bmatrix}

2(x^{2} + xy + y^{2}) = r^{2}

        上面第一个式子平方求和,有:

4(X^{2} + Y^{2}) = 8(x^{2} + xy + y^{2}) = 4r^2

        所以这个切面圆的正等测投影其实也是一个圆,并且半径与球的半径相等。 

        这就是为什么我们在画球时,一般会先直接画一个圆的原因了。另外可以规定输入的 B 点也在这个投影上,所以有“A、B 两点距离就是球的半径”这样的结论。

椭球

        椭球有三个轴,分别平行于 x、y、z轴,确定了球心和半径,就可以作图了。

        在三个轴中,我们规定有两个轴长是相等的,三个半径分别为:(w, h, h) 。所以椭圆方程为:

\frac{x^{2}}{w^{2}} + \frac{y^{2}}{h^{2}} + \frac{z^{2}}{h^{2}} = 1

        在输入的两点 A、B 中,我们以 A 点作为球心,B 点作为切平面x + y + z = 0 所切椭圆的包围矩形的一个顶点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值