Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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 缩放对象的点云并使其位于原始对象的中心,确保它们不相交_Python_Geometry_Scale_Transformation_Point Clouds - Fatal编程技术网

Python 缩放对象的点云并使其位于原始对象的中心,确保它们不相交

Python 缩放对象的点云并使其位于原始对象的中心,确保它们不相交,python,geometry,scale,transformation,point-clouds,Python,Geometry,Scale,Transformation,Point Clouds,我有一个兔子点云——可以是任何物体 我想把大兔子直接放在小兔子的上面。想象一个不同层次的matryoshka dol。问题是让外层与内层完美贴合。主体可能不会重叠,但耳朵会重叠 这是我的密码: import numpy as np #IMPORT THE OBJECT POINT CLOUD c= np.genfromtxt(str('rabbitsmall') + '.txt',autostrip=True) #Determine the x centre of the original o

我有一个兔子点云——可以是任何物体

我想把大兔子直接放在小兔子的上面。想象一个不同层次的matryoshka dol。问题是让外层与内层完美贴合。主体可能不会重叠,但耳朵会重叠

这是我的密码:

import numpy as np
#IMPORT THE OBJECT POINT CLOUD
c= np.genfromtxt(str('rabbitsmall') + '.txt',autostrip=True)

#Determine the x centre of the original object
xmax = np.amax(c[:,0])
xmin = np.amin(c[:,0])
tx = xmin+(xmax-xmin)/4

#Determine the y centre of the original object
ymax = np.amax(c[:,1])
ymin = np.amin(c[:,1])
ty =ymin+(ymax-ymin)/4

#Determine the z centre of the original object
zmax = np.amax(c[:,2])
zmin = np.amin(c[:,2])
tz = zmin+(zmax-zmin)/2


#CREATE A LARGER VERSION OF THE OBJECT
C = np.zeros((len(c),3))

for i in range(0,len(c)):
               C[i][0]= 1.2*c[i][0]
               C[i][1]= 1.2*c[i][1] 
               C[i][2]= 1.2*c[i][2]

#Determine the x centre of the larger object
Xmax = np.amax(C[:,0])
Xmin = np.amin(C[:,0])
TX = Xmin+(Xmax-Xmin)/4

#Determine the y centre of the larger object
Ymax = np.amax(C[:,1])
Ymin = np.amin(C[:,1])
TY =Ymin+(Ymax-Ymin)/4

#Determine the z centre of the larger object
Zmax = np.amax(C[:,2])
Zmin = np.amin(C[:,2])
TZ = Zmin+(Zmax-Zmin)/2

#TRANSLATE THE LARGER OBJECT TO BE OVER THE SMALLER OBJECT. IE THE CENTRES ARE AT THE SAME PLACE
for i in range(0,len(c)):
               C[i][0]= C[i][0]-(TX-tx)
               C[i][1]= C[i][1]-(TY-ty)
               C[i][2]= C[i][2]-(TZ-tz)


np.savetxt('rabbitlarger.txt',C)

您不希望缩放它,而是希望偏移或壳化它

不幸的是,炮击或抵消比简单的比例尺要复杂一点

如果我要尝试正确地执行此操作,我将首先创建点云的Delaunay三角剖分,使用三角剖分(相邻面法线的平均值)计算每个点的法线,然后沿其法线将每个点偏移一定距离


这可能足以满足您的需要。如果您想要更坚固的东西(例如,当壳导致小孔完全闭合时可以处理),那么我建议使用距离场之类的东西,使用移动立方体以一定的偏移距离生成网格。

嘿,谢谢您的回答,我实际上是用这种炮击来迫使我的法线指向外面。我已经为我的兔子生成了法线,它们几乎指向所有地方,除了兔子下面和下巴下面,我希望让法线指向偏移兔子上同一点的方向。有没有办法确保我所有的法线都指向外面,使用python和scipy numpy sklearn等工具?我已经没有主意了如果我是你我会试试