- UID
- 46
- 积分
- 1317
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-9
- 最后登录
- 1970-1-1
|
发表于 2002-11-15 18:01:13
|
显示全部楼层
VBA下可利用TransformBy方法可实现复杂的图形变换
Sub Ch4_TransformBy()
' 创建一直线
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double
Dim endPt(0 To 2) As Double
startPt(0) = 2
startPt(1) = 1
startPt(2) = 0
endPt(0) = 5
endPt(1) = 1
endPt(2) = 0
Set lineObj = ThisDrawing.ModelSpace. _
AddLine(startPt, endPt)
ZoomAll
' 初始化transMat转换矩阵的变量,
'以使其围绕点(0,0,0)并按90度旋转对象。
Dim transMat(0 To 3, 0 To 3) As Double
transMat(0, 0) = 0#: transMat(0, 1) = -1# transMat(0, 2) = 0#: transMat(0, 3) = 0#
transMat(1, 0) = 1#: transMat(1, 1) = 0# transMat(1, 2) = 0#: transMat(1, 3) = 0#
transMat(2, 0) = 0#: transMat(2, 1) = 0# transMat(2, 2) = 1#: transMat(2, 3) = 0#
transMat(3, 0) = 0#: transMat(3, 1) = 0# transMat(3, 2) = 0#: transMat(3, 3) = 1#
'使用定义了的转换矩阵转换直线
lineObj.TransformBy transMat
lineObj.Update
End Sub
矩阵结构(以平面为例),为齐次坐标表示,其结构及含义如下
r00 r01 0 T0
R10 R11 0 T1
R20 R21 1 0
0 0 0 s
以平面为例:其中
T0 ,X向平移量,T1 ,y向平移量,
比如要将一物X向移动5,Y向 移动10,则矩阵结构为
1 0 0 5
0 1 0 10
0 0 1 0
0 0 0 1
r00,r01,r10,r11,表示旋转
r00=cos (a),r01=-sin(a),r10=sin(a),r11=cos(a),A是逆时针转角
绕(100,200)转90度,(45度线对称)则矩阵结构 为
0 1 0 100
1 0 0 200
0 0 1 0
0 0 0 1
Y轴对称,则矩阵结构 (180度)
0 1 0 0
0 -1 0 0
0 0 1 0
0 0 0 1
x 向放大2,Y向放大5
2 0 0 0
0 5 0 0
0 0 1 0
0 0 0 1
以次类推! |
|