Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在xy平面中旋转点云?_Python_Numpy_Math_Geometry_Rotation - Fatal编程技术网

Python 如何在xy平面中旋转点云?

Python 如何在xy平面中旋转点云?,python,numpy,math,geometry,rotation,Python,Numpy,Math,Geometry,Rotation,我想将给定的点云旋转到xy平面。因此,我通过点云安装了一架飞机。通过这种方式,我想计算需要旋转的角度,以获得平面和xy平面中的点云。平面的中心位于原点。所以我需要绕x轴和y轴旋转。但我不知道如何继续下去。有什么想法吗? 以下是我目前的代码: def fitPlaneLTSQ(df): (rows, cols) = df.shape G = np.ones((rows, 3)) G[:, 0] = df['X'] G[:, 1] = df['Z'] Z =

我想将给定的点云旋转到xy平面。因此,我通过点云安装了一架飞机。通过这种方式,我想计算需要旋转的角度,以获得平面和xy平面中的点云。平面的中心位于原点。所以我需要绕x轴和y轴旋转。但我不知道如何继续下去。有什么想法吗?

以下是我目前的代码:

def fitPlaneLTSQ(df):
    (rows, cols) = df.shape
    G = np.ones((rows, 3))
    G[:, 0] = df['X']
    G[:, 1] = df['Z']
    Z = df['Y']
    (a, b, c),resid,rank,s = np.linalg.lstsq(G, Z)
    normal = (a, b, -1)
    nn = np.linalg.norm(normal)
    normal = normal / nn
    return (c, normal)

#load data
data = pd.read_csv('data.csv', sep=';')

# calc middle of cloud
meanx = np.mean(data['X'])
meany = np.mean(data['Y'])
meanz = np.mean(data['Z'])

#translate cloud to orign
data['X'] = data['X'] - meanx
data['Y'] = data['Y'] - meany
data['Z'] = data['Z'] - meanz

#calc plane 
maxx = np.max(data['X'])
maxz = np.max(data['Z'])
minx = np.min(data['X'])
minz = np.min(data['Z'])

c, normal = fitPlaneLTSQ(data)
point = np.array([0.0, 0.0, c])
d = -point.dot(normal)

# compute needed points for plane plotting
xx, yy = np.meshgrid([minx, maxx], [minz, maxz])
z = (-normal[0]*xx - normal[1]*yy - d)*1. / normal[2]

我会说,正是旋转将点云平面的法线与XY平面的法线对齐(即Z或-Z)

查看如何实现这一点的数学知识和一些python代码