基於 Sage 的座標變換 符號運算

2021-06-21 09:58:42 字數 2249 閱讀 4552

前日做作業時要寫一些座標變換的題目, 深感手算無望, 便使用 sage 的符號運算功能高效地完成了所有的計算, 於是把主要的**貼到此部落格中, 以後再用相關的計算, 就不用重複輸入這些**了.

(xx, yy, zz, yz, zx, xy) = var('xx yy zz yz zx xy')

(r, theta, phi, z) = var('r theta phi z')

t_polar = matrix([ ## matrices must be defined this way.

[cos(theta), sin(theta), 0],

[-sin(theta), cos(theta), 0],

[0, 0, 1]])

t_sophere = matrix([

[sin(theta)*cos(phi), sin(theta)*sin(phi), cos(theta)],

[cos(theta)*cos(phi), cos(theta)*sin(phi), -sin(theta)],

[-sin(phi), cos(phi), 0]])

c = matrix([[xx, xy, zx],

[xy, yy, yz],

[zx, yz, zz]])

r_polar = t_polar * c * t_polar.t

result_polar = r_polar(xx=r^2*cos(theta)^2*z, yy=r^2*sin(theta)^2*z,

xy=r^2*sin(theta)*cos(theta)*z, zz = z^3,

yz = r*z^2*sin(theta), zx=r*z^2*cos(theta)).simplify_trig()

r_sophere = t_sophere * c * t_sophere.t

result_sophere = r_sophere(xx=sin(theta)^2*cos(phi)^2*cos(theta),

yy=sin(theta)^2*sin(phi)^2*cos(theta),

zz=cos(theta)^3,

yz=sin(theta)*sin(phi)*cos(theta)^2,

zx=sin(theta)*cos(phi)*cos(theta)^2,

xy=sin(theta)^2*cos(theta)*sin(phi)*cos(phi)).simplify_trig()

後面算 result_sophere 和 result_polar 是當時計算的題目, 不是普適的程式, 貼在這裡吐槽老師留作業太隨意, 這尼瑪是人算的嗎?

結果老師下一次作業的計算是下面這個程式完成的:

x, y, z, a = var('x', 'y', 'z', 'a')

r = var('r')

var('a', latex_name='\lambda')

b = var('mu')

r(x, y, z) = sqrt(x^2 + y^2 + z^2)

u(x, y, z) = a*x*z/r^3

uxx = (u.diff(x)).diff(x)

uxx.show()

v(x, y, z) = a*y*z/r^3

vxx = (v.diff(x)).diff(x)

vxx.show()

w(x, y, z) = a*(z^2/r^3 + ((a+3*b)/(a+b))*(1/r))

wxx = (w.diff(x)).diff(x)

wxx.show()

uyy = (u.diff(y)).diff(y)

uyy.show()

uzz = (u.diff(z)).diff(z)

uzz.show()

vxy = (v.diff(x)).diff(y)

vxy.show()

wxz = (w.diff(x)).diff(z)

wxz.show()

(uxx + uyy + uzz + (a+b)/b * (uxx + vxy + wxz)).simplify_radical().show()

m = vector([u, v, w])

gamma = 1/2 * (m.diff() + m.diff().transpose())

gamma.show()

後面一段座標變換的**就不再貼出來了....

座標變換,空間變換的本質

座標變換或空間變換,本質是相對座標的變化,絕對座標沒變。世界空間有兩個物體a,b。將a變換到b的座標空間意思是 將a從世界空間變換到b的區域性座標空間,也就是在b的區域性座標系中重新表示a的座標 也就是求出a在b座標系中的相對座標 做法很簡單 1,a b 得到乙個向量 v,2,把v分解 投影 到b的...

基於VC 的OpenGL程式設計講座之座標變換 3

四 視口變換。視口變換就是將視景體內投影的物體顯示在二維的視口平面上。運用相機模擬方式,我們很容易理解視口變換就是類似於 的放大與縮小。在計算機圖形學中,它的定義是將經過幾何變換 投影變換和裁剪變換後的物體顯示於螢幕視窗內指定的區域內,這個區域通常為矩形,稱為視口。opengl中相關函式是 glvi...

Svg下的座標變換

1 平移變換 translate 平移表示式transform translate x,y 即新座標系的原點在原座標系的 x,y 處。座標軸的方向不變。2 旋轉變換 rotate transform rotate angle cx,cy angle代表旋轉角度,預設單位是 度 瞬時針為正,逆時針為負...