enocheasty 发表于 2010-9-8 09:36:00

[求助]关于坐标转换的问题

<p>发现越学问题越多了!!!又碰到个坐标转换的问题</p>
<p>我有一个用户坐标系,原点Pt1,x轴向量Vect1,y轴向量Vect2</p>
<p>那么我定义了一个坐标系</p>
<p>Dim UCS as new CoordinateSystem3d (pt1,Vect1,Vect2)</p>
<p>然后我又认为世界坐标的原点就是New Point3d(0,0,0), x轴是New Vector3d(1,0,0) y轴是New Vector3d(0,1,0)</p>
<p>所以我定义了 Dim WCS as new CoordinateSystem3d (New Point3d(0,0,0), New Vector3d(1,0,0),New Vector3d(0,1,0))</p>
<p>然后我定义了一个矩阵 </p>
<p>Dim UCS2WCS as new matrix3d=Matrix3d.AlignCoordinateSystem (Ucs.orign,Ucs.xaxis,Ucs.yaxis,Ucs.zaxis,Wcs.orign,Wcs.xaxis,Wcs.yaxis,Wcs.zaxis)</p>
<p>从参数取名意思上看,通过这个矩阵,就能把点从UCS坐标转到WCS。</p>
<p>也就是wcsPt=ucsPt.TransformBy(UCS2WCS)</p>
<p>&nbsp;</p>
<p>但是实际的操作中,我发现我给定的UCS坐标转过来的WCS坐标并不正确。</p>

雪山飞狐_lzh 发表于 2010-9-8 10:39:00

<p>倒置一下?</p>

enocheasty 发表于 2010-9-8 10:59:00

<p>呵呵,这里就版主能回答问题!!</p>
<p>&nbsp;</p>
<p>我也试过倒置用wcsPt=ucsPt.TransformBy(UCS2WCS.inverse) ,结果更要命!!</p>
<p>&nbsp;</p>
<p>你帮忙看看上面,我的思路正确吗? </p>

雪山飞狐_lzh 发表于 2010-9-8 11:55:00

<p>嗯,你的代码似乎感觉没什么问题?</p>
<p>调用的问题?</p>

ywlm 发表于 2010-9-8 12:20:00

<p>会不会是Dim UCS as new CoordinateSystem3d (pt1,Vect1,Vect2)这一句有问题</p>
<p>pt1是世界坐标系的值还是用户坐标系的值,跟这个是否有关?</p>

enocheasty 发表于 2010-9-8 13:31:00

<p>谢谢楼上,</p>
<p>不过我觉得关系不大!因为是建立一个坐标系统嘛,如果都以自身为参照,那么所有的坐标系统都相同了!</p>
<p>UCS这个系统,我觉得,它需要携带的就是相对于WCS下的原点、轴向的信息。不然,它的建立跟WCS的建立就没区别了!</p>

enocheasty 发表于 2010-9-9 11:07:00

<p>问题还没有解决啊!!!</p>

ywlm 发表于 2010-9-9 12:22:00

"Dim UCS2WCS as new matrix3d=Matrix3d.AlignCoordinateSystem (Ucs.orign,Ucs.xaxis,Ucs.yaxis,Ucs.zaxis,Wcs.orign,Wcs.xaxis,Wcs.yaxis,Wcs.zaxis)"这一句语法好像有点问题,应该没有NEW关键字吧?

ywlm 发表于 2010-9-9 12:37:00

<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &lt;CommandMethod("test")&gt; _<br/>&nbsp;&nbsp;&nbsp; Public Sub test()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim UCS As New CoordinateSystem3d(New Point3d(20, 10, 0), New Vector3d(1, 0, 0), New Vector3d(0, 1, 0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim WCS As New CoordinateSystem3d(Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim UCSPoint As New Point3d(-10, -310, 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim UCS2WCS As Matrix3d = Matrix3d.AlignCoordinateSystem(WCS.Origin, WCS.Xaxis, WCS.Yaxis, WCS.Zaxis, UCS.Origin, UCS.Xaxis, UCS.Yaxis, UCS.Zaxis)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim WCSPoint As Point3d = UCSPoint.TransformBy(UCS2WCS)</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; End Sub</font></p>
<p>这个好像能满足你的意思</p>

enocheasty 发表于 2010-9-9 12:52:00

<p>额~~,from和to对调了一下就OK了? 我要回去实验一下!</p>
页: [1] 2
查看完整版本: [求助]关于坐标转换的问题