在opencadcade中, 通過gp_trsf類來進行矩陣變換操作,
採用矩陣在左的方式: 新點 = 變換矩陣 * 點
基本原理如下:
//! defines a non-persistent transformation in 3d space.
//! the following transformations are implemented :
//! . translation, rotation, scale
//! . symmetry with respect to a point, a line, a plane.
//! complex transformations can be obtained by combining the
//! previous elementary transformations using the method
//! multiply.
//! the transformations can be represented as follow ://!
//! v1 v2 v3 t xyz xyz
//! | a11 a12 a13 a14 | | x | | x'|
//! | a21 a22 a23 a24 | | y | | y'|
//! | a31 a32 a33 a34 | | z | = | z'|
//! | 0 0 0 1 | | 1 | | 1 |//!
//! where defines the vectorial part of the
//! transformation and t defines the translation part of the
//! transformation.
//! this transformation never change the nature of the objects.
gp_trsf定義了單個平移, 旋轉, 縮放, 對稱等操作
複雜變換: 需要通過 gp_trsf乘法來實現, 如:
乙個物體要經過 縮放, 旋轉, 平移等一系列操作時, 必須定義為
平移 * 旋轉 * 縮放
python示例:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import
math
from occ.gp import
(gp_pnt2d, gp_vec2d, gp_pnt, gp_vec,
gp_ax1, gp_ox, gp_oy, gp_oz,
gp_trsf)
atranslation =gp_trsf()
atranslation.settranslation(gp_vec(1, 1, 1))
arotate =gp_trsf()
arotate.setrotation(gp_oz(), math.pi)
atransform = atranslation *arotate
deftest1():
print('
測試1, 平移 -> 旋轉')
pt = gp_pnt(-1, -1, -1)
(pt.coord())
pt2 =pt.transform(atranslation)
(pt.coord())
pt2 =pt.transform(arotate)
(pt.coord())
deftest2():
print('
測試2, 平移 * 旋轉')
pt = gp_pnt(-1, -1, -1)
(pt.coord())
pt2 = pt.transform(atranslation *arotate)
(pt.coord())
deftest3():
print('
測試3, 旋轉 -> 平移')
pt = gp_pnt(-1, -1, -1)
(pt.coord())
pt2 =pt.transform(arotate)
(pt.coord())
pt2 =pt.transform(atranslation)
(pt.coord())
deftest4():
print('
測試4, 旋轉 * 平移')
pt = gp_pnt(-1, -1, -1)
(pt.coord())
pt2 = pt.transform(arotate *atranslation)
(pt.coord())
if__name__ == '
__main__':
test1()
test2()
test3()
test4()
輸出結果為:測試1, 平移 -> 旋轉
(-1.0, -1.0, -1.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
測試2, 平移 * 旋轉
(-1.0, -1.0, -1.0)
(2.0, 2.0, 0.0)
測試3, 旋轉 -> 平移
(-1.0, -1.0, -1.0)
(1.0000000000000002, 0.9999999999999999, -1.0)
(2.0, 2.0, 0.0)
測試4, 旋轉 * 平移
(-1.0, -1.0, -1.0)
(0.0, 0.0, 0.0)
transforms CTM,變換矩陣
quartz轉換實現的原理 quartz把繪圖分成兩個部分,使用者空間,即和裝置無關,裝置空間,使用者空間和裝置空間中間存在乙個轉換矩陣 ctm 本章實質是講解ctm quartz提供的3大功能 移動,旋轉,縮放 演示如下,首先載入一張 移動函式cgcontexttranslatectm mycon...
opengl 矩陣變換
opengl 矩陣變換 opengl 座標系的變換如下圖 我們給我們的圖形,設定好頂點座標後,通過model matrix 變換為世界座標,然後 view matrix相機座標,projection matrix 螢幕座標x,y 1,1 矩陣變換的結果是把三維的世界最終裁剪為二維的螢幕,數學的說法就...
OpenGL矩陣變換
現在考慮object座標系中的點p px,p y,pz 向camera座標系進行變換,object座標軸分別為xyz,camera座標軸分別為uvn p pxx pyy pz z 先只考慮旋轉變換,camera座標系的基向量可表示為 u v n u.xx u.yy u.zz v.xx v.yy v....