3D坐标系:3D笛卡尔坐标系和3D柱面坐标系的区别

来源:互联网 发布:手机虚拟网络能否上网 编辑:程序博客网 时间:2024/04/29 00:50

在做一个WPF集成SharpDX的功能。

遇见一个奇葩问题:MeshBuilder.AddBox(Point3D center, double xlength, double ylength, double zlength, BoxFaces faces);这个方法里面的BoxFaces 参数很让人迷惑。

查看了一下源码:

BoxFaces下有如下成员:

Top = PositiveZ,

Bottom = NegativeZ,

Left = NegativeY,

Right = PositiveY,

Front = PositiveX,

Back = NegativeX,

...

那么问题就来了,这里的Top 、Bottom 、Left 、Right 、Front 、Back 和主界面的ShowViewCube里那些F B L R U D所指的方向不一样。。

如图:

               


ShowViewCube(3D笛卡尔坐标系--右手)                            BoxFaces(3D柱面坐标系--右手)


这可咋整,让我好迷惑,以后这参数咋设置,乱七八糟的。。。

于是各种百度,最后在一篇博文里看到了对于3D坐标系的介绍,解决了我的问题。


到这里还没结束,用MeshBuilder.AddBox(Point3D center, double xlength, double ylength, double zlength, BoxFaces faces);添加的面(比如图片)

显示出来却是颠倒的,具体效果就是沿着X+方向顺时针旋转了90°,在这里再做一个逆旋转回去就行了。

RotateTransform3D rota = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 90));// 把笛卡尔坐标系的点反转回柱面坐标系(绕X+轴顺时针旋转90°)
Vector3D center = new Vector3D(10,10,10);
center = rota.Transform(center);



-----------------------------------------------------------------以下为引用--------------------------------------------------------------------------------------

(http://heweiyou.blog.51cto.com/5656256/1129911 感谢原博主的文章。。。)

3D笛卡尔坐标

3D笛卡尔坐标系故名思议则是在2D坐标系的基础上增加了一个维度,命名其为z轴,当然z轴也应有其正方向,因此出现了两种坐标系:左手坐标系(LHS)和右手坐标系(RHS)(用左手或右手握住z轴,如果其他手指从x轴绕到y轴,则大拇指将指向z轴的正方向)。

 

          

             

3D柱面坐标系

3D柱坐标系较为接近2D极坐标系,在rθ的基础上多了一个z的值,如图:

  

          

           

其中:

x = r*cosθ

y = r*sinθ

z = z

r =sqrt(x*x+y*y)

tanθ = y/x

3D球面坐标系

使用两个角度和到原点的距离来定义点,如图:

                 

           

    其中:

    r = p*sinφ

    x = r*cosθ

    y = r*sinθ





原创粉丝点击