Identikit-Robot/coordinates_change.py

151 lines
3.6 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
def new_coord(contours, x_scale, y_scale, angle):
''''''
''' SCALE THE IMAGE HERE '''
scale_contours = []
for i in contours:
x = i[0] * x_scale
y = i[1] * y_scale
z = i[2]
scale_contours.append([x, y, z])
''' ROTATE THE IMAGE HERE '''
angle = angle * np.pi / 180
rotate_contours = []
for i in scale_contours:
x_old = i[0]
y_old = i[1]
x = x_old * np.cos(angle) - y_old * np.sin(angle)
y = x_old * np.sin(angle) + y_old * np.cos(angle)
z = i[2]
rotate_contours.append([x, y, z])
return rotate_contours
def scale_calculator(contours, size):
x_max = contours[0][0]
x_min = contours[0][0]
y_max = contours[0][1]
y_min = contours[0][1]
for i in contours:
x = i[0]
y = i[1]
if x_min > x:
x_min = x
if x > x_max:
x_max = x
if y_min > y:
y_min = y
if y > y_max:
y_max = y
#print([[x_min, x_max], [y_min, y_max]]) #display max and min in x and y
x_scale = 1.0
y_scale = 1.0
if size[0] != 0:
x_scale = size[0]/(x_max - x_min)
if size[1] != 0:
y_scale = size[1]/(y_max - y_min)
if size[0] == 0:
x_scale = y_scale
if size[1] == 0:
y_scale = x_scale
x_min = x_min*x_scale
y_min = y_min*y_scale
return [x_min, y_min, x_scale, y_scale]
def get_size(coords):
x_max = coords[0][0]
x_min = coords[0][0]
y_max = coords[0][1]
y_min = coords[0][1]
for i in range(len(coords)):
x = coords[i][0]
y = coords[i][1]
if x_min > x:
x_min = x
if x > x_max:
x_max = x
if y_min > y:
y_min = y
if y > y_max:
y_max = y
return [[x_min, x_max], [y_min, y_max]] #display max and min in x and y
def symetry(coords, x_max, y_max, symetry):
new_coords = []
for i in coords:
x = i[0]
y = i[1]
z = i[2]
if symetry == 'x':
x = x_max - x
if symetry == 'y':
y = y_max - y
new_coords.append([x, y, z])
return new_coords
def set_origin(coords, origin):
[[x_min, x_max], [y_min, y_max]] = get_size(coords)
new_coords = []
for i in coords:
x = i[0] - x_min + origin[0]
y = i[1] - y_min + origin[1]
z = i[2] + origin[2]
new_coords.append([x, y, z])
return new_coords
def plot_function(coords):
x_coords = []
y_coords = []
z_coords = []
for i in coords:
x_coords.append(i[0])
y_coords.append(i[1])
z_coords.append(i[2])
plt.scatter(y_coords, x_coords, label='Points', color='blue', s=5)
plt.gca().set_aspect('equal', adjustable='box')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot of Points')
plt.legend()
plt.show()
def draw_function(coords):
temp_set_x = []
temp_set_y = []
final_set_x = []
final_set_y = []
for i in coords:
temp_set_x.append(i[0])
temp_set_y.append(i[1])
if i[2] != 0:
final_set_x.append(temp_set_x)
final_set_y.append(temp_set_y)
temp_set_x = []
temp_set_y = []
#print(final_set_x)
#print(final_set_y)
for j in range(len(final_set_x)):
plt.plot(final_set_x[j], final_set_y[j])
plt.gca().set_aspect('equal', adjustable='box')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot of Points')
plt.show()