日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python坐标系转换函数_Numpy-坐标系之间的转换

發(fā)布時間:2025/4/5 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python坐标系转换函数_Numpy-坐标系之间的转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用Numpy我想在坐標系之間轉換位置向量。

我有兩個三維空間的飛機。

每個平面由其中心定義:C[0] = (X0, Y0, Z0)

C[1] = (X1, Y1, Z1)

(X,Y,Z指全球坐標系)C = np.array([[0,0,0],[-4,2,1]])

以及它的法向量:H[0] = (cos(alpha[0])*sin(A[0]), cos(alpha[0])*cos(A[0]), sin(A[0])

H[1] = (cos(alpha[1])*sin(A[1]), cos(alpha[1])*cos(A[1]), sin(A[1])

alpha=仰角

A=方位角H = np.array([[-0.23, -0.45, 0.86], [-0.12, -0.24, 0.86]])

我有一個點p(xp, yp, 0)位于平面0(xp,yp指的是一個具有中心C[0]的局部坐標系,當alpha = A = 0時,其xyz軸與全局XYZ軸對齊)

我使用以下函數(shù)從平面0的局部坐標系轉換為全局坐標系:import numpy as np

def rotateAxisX(alpha):

'''

Rotation about x axis

:param alpha: plane altitude angle in degrees

:return: x-axis rotation matrix

'''

rotX = np.array([[1, 0, 0], [0, np.cos(np.deg2rad(alpha)), np.sin(np.deg2rad(alpha))], [0, -np.sin(np.deg2rad(alpha)), np.cos(np.deg2rad(alpha))]])

return rotX

def rotateAxisZ(A):

'''

Rotation about z axis

:param A: plane azimuth angle in degrees

:return: z-axis rotation matrix

'''

rotZ = np.array([[np.cos(np.deg2rad(A)), np.sin(np.deg2rad(A)), 0], [-np.sin(np.deg2rad(A)), np.cos(np.deg2rad(A)), 0], [0, 0, 1]])

return rotZ

def local2Global(positionVector, planeNormalVector, positionVectorLocal):

'''

Convert point from plane's local coordinate system to global coordinate system

:param positionVector: plane center in global coordinates

:param planeNormalVector: the normal vector of the plane

:param positionVectorLocal: a point on plane (xp,yp,0) with respect to the local coordinate system of the plane

:return: the position vector of the point in global coordinates

>>> C = np.array([-10,20,1200])

>>> H = np.array([-0.23, -0.45, 0.86])

>>> p = np.array([-150, -1.5, 0])

>>> P = local2Global(C, H, p)

>>> np.linalg.norm(P-C) == np.linalg.norm(p)

True

'''

alpha = np.rad2deg(np.arcsin(planeNormalVector[2]))

A = np.where(planeNormalVector[1] > 0, np.rad2deg(np.arccos(planeNormalVector[1] / np.cos(np.deg2rad(alpha)))), 360 - np.rad2deg(np.arccos(planeNormalVector[1] / np.cos(np.deg2rad(alpha)))))

positionVectorGlobal = positionVector + np.dot(np.dot(rotateAxisZ(A), rotateAxisX(90 - alpha)), positionVectorLocal)

return positionVectorGlobal

上面的工作似乎和預期的一樣。

然后我計算一條線從平面0p(xp,yp,0)上的一個點經(jīng)過的交點,它的方向向量是S = (0.56, -0.77, 0.3)>>> C = np.array([[0,0,0],[-4,2,1]]) # plane centers

>>> H = np.array([[-0.23, -0.45, 0.86], [-0.12, -0.24, 0.86]]) # plane normal vectors

>>> S = np.array([0.56, -0.77, 0.3]) # a direction vector

>>> p = np.array([-1.5, -1.5, 0]) # a point on a plane

>>> intersectingPlaneIndex = 0 # choose intersecting plane, this plane has the point p on it

>>> intersectedPlaneIndex = 1 # this plane intersects with the line passing from p with direction vector s

>>> P = local2Global(C[intersectingPlaneIndex], H[intersectingPlaneIndex], p) # point p in global coordinates

>>> np.isclose(np.linalg.norm(p), np.linalg.norm(P - C[intersectingPlaneIndex]), 10e-8)

True

所以第一個轉變是成功的。

現(xiàn)在讓我們在全局坐標系中找到交點E>>> t = np.dot(H[intersectedPlaneIndex], C[intersectedPlaneIndex, :] - P) / np.dot(H[intersectedPlaneIndex], S)

>>> E = P + S * t

>>> np.around(E, 2)

array([ 2.73, -0.67, 1.19])

到目前為止,我找到了位于平面1上的點E(全局坐標)。

問題是:

如何將點E從全局坐標轉換為平面1的坐標系并獲得e(xe, ye, 0)?

我試過:def global2Local(positionVector, planeNormalVector, positionVectorGlobal):

'''

Convert point from global coordinate system to plane's local coordinate system

:param positionVector: plane center in global coordinates

:param planeNormalVector: the normal vector of the plane

:param positionVectorGlobal: a point in global coordinates

:note: This function translates the given position vector by the positionVector and rotates the basis axis in order to obtain the positionVectorCoordinates in plane's coordinate system

:warning: it does not function as it should

'''

alpha = np.rad2deg(np.arcsin(planeNormalVector[2]))

A = np.where(planeNormalVector[1] > 0, np.rad2deg(np.arccos(planeNormalVector[1] / np.cos(np.deg2rad(alpha)))), 360 - np.rad2deg(np.arccos(planeNormalVector[1] / np.cos(np.deg2rad(alpha)))))

positionVectorLocal = np.dot(np.dot(np.linalg.inv(rotateAxisZ(A)), np.linalg.inv(rotateAxisX(90 - alpha))), positionVectorGlobal - positionVector) + positionVectorGlobal

return positionVectorLocal

以及:>>> e = global2Local(C[intersectedPlaneIndex], H[intersectedPlaneIndex], E)

>>> e

array([ -2.54839059e+00, -5.48380179e+00, -1.42292121e-03])

首先,只要e[2]接近于零,這看起來是可以的,但是>>> np.linalg.norm(E-C[intersectedPlaneIndex])

7.2440723159783182

>>> np.linalg.norm(e)

6.0470140356703537

所以轉換是錯誤的。有什么想法嗎?

總結

以上是生活随笔為你收集整理的python坐标系转换函数_Numpy-坐标系之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩视频 | 九九热精品视频在线播放 | 欧美日韩片 | 精国产品一区二区三区a片 国产精品第一 | 国产精品久久久久久亚洲伦 | av在线不卡网 | 一级特黄aa大片欧美 | 无码精品国产一区二区三区 | 在线观看成人 | www视频免费在线观看 | 免费在线成人av | 好男人www在线视频 我们的2018在线观看免费高清 | 中文字幕第88页 | 99热一区二区 | 久久一二三区 | 国产精品无码免费在线观看 | 亚洲色图13p | 性欧美17一18内谢 | 国产成a人亚洲精v品在线观看 | 精品一区二区在线看 | 激情开心站 | 国产精品黄色网 | 国产sm调教一区二区 | 免费观看国产精品视频 | 视频一区二区三区精品 | 尤物天堂| 欧美黄页| 国产精品自在线 | 深夜视频在线观看免费 | 视屏一区 | 丰满岳乱妇在线观看中字无码 | av网站免费在线播放 | 亚洲天堂一区二区三区四区 | 99久久综合网 | 最新日韩中文字幕 | 在线色资源 | 丰满秘书被猛烈进入高清播放在 | 日本久久综合 | 麻豆自拍视频 | 日韩在线三级 | 四虎国产在线 | 婷婷综合五月天 | 好吊色视频一区二区 | 综合精品视频 | 亚洲国产美女视频 | 国产精品第一国产精品 | 大黄网站在线观看 | 黄色同人网站 | 成年人国产视频 | 熟妇人妻无乱码中文字幕真矢织江 | 一级大片视频 | 亚洲午夜一区二区 | 中文字幕日韩一区二区三区不卡 | 国产91精品久久久久久久网曝门 | 美日韩免费视频 | 韩国午夜av | 夜夜草导航 | 性――交――性――乱 | 91在线观看免费高清 | 日韩免| 国产欧美日韩综合精品一区 | 免费日韩| 老公吃小头头视频免费观看 | 欧美在线一二三区 | 一本一道久久a久久精品蜜桃 | 国产尤物视频在线观看 | 涩涩视频在线播放 | 亚洲经典一区二区三区 | 一本色道久久综合亚洲精品酒店 | 久久久久久久久免费视频 | 国产精品自拍偷拍 | 男女曰逼视频 | 日韩精品久久久久久免费 | 日韩一区二区视频在线观看 | 亚洲天堂网在线观看视频 | 日本人妻丰满熟妇久久久久久 | 国产激情av一区二区三区 | 欧美老女人性视频 | 91精品国产乱码久久 | 亚洲精品6 | 成人福利在线看 | 欧美一区二区视频免费观看 | 91麻豆精品国产91久久久久久 | 美女交配| 小早川怜子一区二区三区 | 成了校长的性脔h文 | 亚洲视频在线网 | 日韩精品123| 超碰日本 | 亚洲精品成人 | 精品久久久久久久久久久久久久久久久 | 亚洲av无码一区二区乱子伦as | 性www| aaa国产视频| 99精品国产一区 | 91国内揄拍国内精品对白 | 天天爽天天 | 奶妈的诱惑 | 香蕉一区二区三区四区 |