2023-09-05 15:54:19 +03:00
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
import numpy
|
|
|
|
|
from matplotlib import pyplot
|
|
|
|
|
|
2023-09-07 14:19:18 +03:00
|
|
|
from transformations import centroid, calculate_rotation_matrix, convert_rotation_matrix_to_angles
|
2023-09-05 15:54:19 +03:00
|
|
|
|
|
|
|
|
expected_points_file_path = Path('expected_points.txt')
|
|
|
|
|
actual_points_file_path = Path('actual_points.txt')
|
|
|
|
|
|
|
|
|
|
plot_3d = pyplot.figure().add_subplot(projection='3d')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def read_points_from_file(points_file_path: Path) -> numpy.ndarray:
|
|
|
|
|
with points_file_path.open('r') as points_file:
|
|
|
|
|
return numpy.array([[float(coordinate) for coordinate in point_line.strip().split(' ')]
|
|
|
|
|
for point_line in points_file])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
expected_points = read_points_from_file(expected_points_file_path)
|
|
|
|
|
actual_points = read_points_from_file(actual_points_file_path)
|
|
|
|
|
|
2023-09-07 14:19:18 +03:00
|
|
|
rotation_matrix = calculate_rotation_matrix(actual_points, expected_points)
|
|
|
|
|
angles = convert_rotation_matrix_to_angles(rotation_matrix)
|
2023-09-05 15:54:19 +03:00
|
|
|
|
2023-09-07 14:19:18 +03:00
|
|
|
actual_points_rotated = numpy.dot(actual_points, rotation_matrix)
|
2023-09-05 15:54:19 +03:00
|
|
|
|
2023-09-07 14:19:18 +03:00
|
|
|
offset = centroid(actual_points_rotated) - centroid(expected_points)
|
|
|
|
|
actual_points_converted = actual_points_rotated - offset
|
|
|
|
|
|
|
|
|
|
print(f"{angles = }")
|
|
|
|
|
print(f"{offset = }")
|
|
|
|
|
plot_3d.plot(actual_points_converted[:, 0], actual_points_converted[:, 1], actual_points_converted[:, 2], 'o-', markersize=12, linewidth=3)
|
2023-09-05 15:54:19 +03:00
|
|
|
plot_3d.plot(expected_points[:, 0], expected_points[:, 1], expected_points[:, 2], 'o-', markersize=12, linewidth=3)
|
|
|
|
|
plot_3d.grid(True)
|
|
|
|
|
plot_3d.tick_params(labelsize=15)
|
|
|
|
|
|
|
|
|
|
pyplot.show()
|