#과제1: 포인트 클라우드 평행이동
""""""
import open3d as o3d
import numpy as np
import copy
filepath = "datafile/cropped_pcd.ply"
pcd1 = o3d.io.read_point_cloud(filepath)
pcd2 = copy.deepcopy(pcd1)
center = pcd1.get_center()
pcd2.translate(-center)
axis_frame =o3d.geometry.TriangleMesh.create_coordinate_frame(size=1,
origin=[0, 0, 0])
o3d.visualization.draw_geometries([pcd1,pcd2,axis_frame],
width=500, height=500)
#과제2: 회전변환
""""""
import open3d as o3d
import numpy as np
import copy
mesh_cylinder = o3d.geometry.TriangleMesh.create_cylinder(radius=0.1,height=1)
mesh_cylinder.translate([0,0,0])
mesh_cylinder.compute_vertex_normals()
mesh_cylinder.paint_uniform_color([0.1, 0.9, 0.1])
mesh_cylinder.scale(0.5,center = mesh_cylinder.get_center())
R = mesh_cylinder.get_rotation_matrix_from_xyz((np.pi/2,0,0))
mesh_cylinder.rotate(R,center=mesh_cylinder.get_center())
mesh_cylinder2 = o3d.geometry.TriangleMesh.create_cylinder(radius=0.1,height=1)
mesh_cylinder2.translate([0,0,0])
mesh_cylinder2.compute_vertex_normals()
mesh_cylinder2.paint_uniform_color([0, 0, 1])
mesh_cylinder2.scale(0.5,center = mesh_cylinder.get_center())
mesh_cylinder3 = o3d.geometry.TriangleMesh.create_cylinder(radius=0.1,height=1)
mesh_cylinder3.translate([0,0,0])
mesh_cylinder3.compute_vertex_normals()
mesh_cylinder3.paint_uniform_color([1,0,0])
mesh_cylinder3.scale(0.5,center = mesh_cylinder.get_center())
R2 = mesh_cylinder3.get_rotation_matrix_from_xyz((0,np.pi /2,0))
mesh_cylinder3.rotate(R2,center = mesh_cylinder3.get_center())
axis_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(size=1.0)
o3d.visualization.draw_geometries([mesh_cylinder, mesh_cylinder3, mesh_cylinder2, axis_frame], width=500,
height=500)
#과제3: 회전변환 + 평행이동
""""""
import open3d as o3d
import numpy as np
import copy
mesh_cylinder = o3d.geometry.TriangleMesh.create_cylinder(radius=0.1,height=1)
mesh_cylinder.translate([0,0,0])
mesh_cylinder.compute_vertex_normals()
mesh_cylinder.paint_uniform_color([0,0,1])
mesh_cylinder.scale(0.5,center = mesh_cylinder.get_center())
pts = copy.deepcopy(mesh_cylinder)
pts.paint_uniform_color([0.1,0.9,0.1])
R = pts.get_rotation_matrix_from_xyz((np.pi/2,0,0))
pts.rotate(R,center= pts.get_center())
pts.translate([0.5,0,0])
axis_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(size=1.0)
o3d.visualization.draw_geometries([mesh_cylinder, pts, axis_frame], width=500,
height=500)
#과제4: 일반변환
import open3d as o3d
import numpy as np
import copy
filepath = "datafile/cropped_pcd.ply"
pcd1 = o3d.io.read_point_cloud(filepath)
pcd2 = copy.deepcopy(pcd1)
center = pcd2.get_center()
T = np.array([
[1,0,0,-2.5],
[0,1,0,-2],
[0,0,1,-1.45],
[0,0,0,1]
])
pcd2.transform(T)
axis_frame= o3d.geometry.TriangleMesh.create_coordinate_frame(size = 0.5, origin = [0, 0, 0])
o3d.visualization.draw_geometries([pcd1, pcd2, axis_frame], width = 500, height = 500)
import open3d as o3d
import numpy as np
import copy
mesh_cylinder1 = o3d.geometry.TriangleMesh.create_cylinder(radius = 0.08,height = 0.8)
mesh_cylinder1.compute_vertex_normals()
mesh_cylinder1.paint_uniform_color([0.1, 0.9, 0.1])
mesh_cylinder2 = copy.deepcopy(mesh_cylinder1)
mesh_cylinder2.compute_vertex_normals()
mesh_cylinder2.paint_uniform_color([0.9, 0.1, 0.1])
mesh_cylinder3 = copy.deepcopy(mesh_cylinder2)
mesh_cylinder3.compute_vertex_normals()
mesh_cylinder3.paint_uniform_color([0.1, 0.1, 0.9])
center1 = mesh_cylinder1.get_center()
center2 = mesh_cylinder2.get_center()
center3 = mesh_cylinder3.get_center()
T1 = np.eye(4)
T1[:3, :3] = o3d.geometry.get_rotation_matrix_from_xyz(((np.pi/2), 0, 0))
T1[0, 3] = -center1[0]
T1[1, 3] = -center1[1]
T1[2, 3] = -center1[2]
T2 = np.eye(4)
T2[:3, :3] = o3d.geometry.get_rotation_matrix_from_xyz((0, (np.pi/2), 0))
T2[0, 3] = -center2[0]
T2[1, 3] = -center2[1]
T2[2, 3] = -center2[2]
T3 = np.eye(4)
T3[:3, :3] = o3d.geometry.get_rotation_matrix_from_xyz((0, 0, (np.pi/2)))
T3[0, 3] = -center3[0]
T3[1, 3] = -center3[1]
T3[2, 3] = -center3[2]
print(T1, "\n", T2, "\n", T3)
mesh_cylinder1.transform(T1)
mesh_cylinder2.transform(T2)
mesh_cylinder3.transform(T3)
mesh_frame= o3d.geometry.TriangleMesh.create_coordinate_frame(size = 1, origin = [0, 0, 0])
o3d.visualization.draw_geometries([mesh_cylinder1, mesh_cylinder2, mesh_cylinder3, mesh_frame],width = 500, height = 500)
import open3d as o3d
import numpy as np
import copy
mesh_cylinder1 = o3d.geometry.TriangleMesh.create_cylinder(radius = 0.08,height = 0.8)
mesh_cylinder1.compute_vertex_normals()
mesh_cylinder1.paint_uniform_color([0.1, 0.9, 0.1])
mesh_cylinder2 = copy.deepcopy(mesh_cylinder1)
mesh_cylinder2.compute_vertex_normals()
mesh_cylinder2.paint_uniform_color([0.1, 0.1, 0.9])
center1 = mesh_cylinder1.get_center()
center2 = mesh_cylinder2.get_center()
T1 = np.eye(4)
T1[:3, :3] = o3d.geometry.get_rotation_matrix_from_xyz(((np.pi/2), 0, 0))
T1[0, 3] = -center1[0] + 0.6
T1[1, 3] = -center1[1]
T1[2, 3] = -center1[2]
T2 = np.eye(4)
T2[:3, :3] = o3d.geometry.get_rotation_matrix_from_xyz((0, 0, (np.pi/2)))
T2[0, 3] = -center2[0]
T2[1, 3] = -center2[1]
T2[2, 3] = -center2[2]
mesh_cylinder1.transform(T1)
mesh_cylinder2.transform(T2)
print(T1, "\n", T2)
mesh_frame= o3d.geometry.TriangleMesh.create_coordinate_frame(size = 1, origin = [0, 0, 0])
o3d.visualization.draw_geometries([mesh_cylinder1, mesh_cylinder2, mesh_frame],width = 500, height = 500)