hanlin369 发表于 2007-12-20 16:39:00

空间中任意三点,如何转换坐标系使该三点在新坐标系的XY平面内

空间中任意三点,如何转换坐标系使该三点在新坐标系的XY平面内

jkbanana 发表于 2007-12-20 18:52:00


'给定点p1,p2,p3
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
Dim p3(0 To 2) As Double
''''''''''''''''''''''''''''
''''''''''''''''''''''''''''
Dim vx(0 To 2) As Double
Dim vy(0 To 2) As Double
Dim vz(0 To 2) As Double
Dim x(0 To 2) As Double
Dim y(0 To 2) As Double
Dim z(0 To 2) As Double
Dim i As Integer
'''
'矢量 vx , vy由点p1,p2,p3决定
for i = 0 To 2
vx(i)=p2(i)-p1(i)
vy(i)=p3(i)-p1(i)
Next
'UCS坐标系的x轴
for i = 0 To 2
x(i)=vx(i)
Next
'vz = vx X vy(矢量的外积运算)
vz(0) = vx(1) * vy(2) - vx(2) * vy(1)
vz(1) = vx(2) * vy(0) - vx(0) * vy(2)
vz(2) = vx(0) * vy(1) - vx(1) * vy(0)
'UCS坐标系的z轴
for i = 0 To 2
z(i)=vz(i)
Next
'UCS坐标系的y轴   
y(0) = z(1) * x(2) - z(2) * x(1)
y(1) = z(2) * x(0) - z(0) * x(2)
y(2) = z(0) * x(1) - z(1) * x(0)
'则,UCS坐标系
Dim ucsObj As AcadUCS
Dim ucsx(0 To 2) As Double
Dim ucsy(0 To 2) As Double
For i = 0 To 2
ucsx(i) = p1(i) + x(i)
ucsy(i) = p1(i) + y(i)
Next
Set ucsObj = ThisDrawing.UserCoordinateSystems.Add(p1, ucsx, ucsy, "UCSName")

hanlin369 发表于 2007-12-21 15:13:00

我的思路是这样的:
空间中的任意三点p1、p2、p3,一直线L1过p1、p2点,另一条直线L2过p3点与直线L1相垂于p4点,
以p4点为坐标原点,p1(或p2)、P3点分别为x、y轴上的一点,坐标变换。

jkbanana 发表于 2007-12-21 19:20:00

你的思路很好。
求垂足的方法本论坛也有不少。也不麻烦。
页: [1]
查看完整版本: 空间中任意三点,如何转换坐标系使该三点在新坐标系的XY平面内