OCC 矩陣變換

2022-04-29 07:33:08 字數 3018 閱讀 9781

在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)

print

(pt.coord())

pt2 =pt.transform(atranslation)

print

(pt.coord())

pt2 =pt.transform(arotate)

print

(pt.coord())

deftest2():

print('

測試2, 平移 * 旋轉')

pt = gp_pnt(-1, -1, -1)

print

(pt.coord())

pt2 = pt.transform(atranslation *arotate)

print

(pt.coord())

deftest3():

print('

測試3, 旋轉 -> 平移')

pt = gp_pnt(-1, -1, -1)

print

(pt.coord())

pt2 =pt.transform(arotate)

print

(pt.coord())

pt2 =pt.transform(atranslation)

print

(pt.coord())

deftest4():

print('

測試4, 旋轉 * 平移')

pt = gp_pnt(-1, -1, -1)

print

(pt.coord())

pt2 = pt.transform(arotate *atranslation)

print

(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....