rename folders
This commit is contained in:
0
software/path tool/src/path/__init__.py
Normal file
0
software/path tool/src/path/__init__.py
Normal file
17
software/path tool/src/path/backward.py
Normal file
17
software/path tool/src/path/backward.py
Normal file
@ -0,0 +1,17 @@
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps, reverse=True)
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [path, mir_path, path, mir_path, path, mir_path, ], "shift", 20, (0, halfsteps)
|
27
software/path tool/src/path/climb.py
Normal file
27
software/path tool/src/path/climb.py
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle2_generator
|
||||
|
||||
g_steps = 20
|
||||
y_radius = 20
|
||||
z_radius = 80
|
||||
x_radius = 30
|
||||
|
||||
z_shift = -30
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
rpath = [(x, y, z + z_shift) for x, y, z in semicircle2_generator(g_steps, y_radius, z_radius, x_radius)]
|
||||
lpath = [(x, y, z + z_shift) for x, y, z in semicircle2_generator(g_steps, y_radius, z_radius, -x_radius)]
|
||||
|
||||
mir_rpath = deque(rpath)
|
||||
mir_rpath.rotate(halfsteps)
|
||||
|
||||
mir_lpath = deque(lpath)
|
||||
mir_lpath.rotate(halfsteps)
|
||||
|
||||
return [rpath, mir_rpath, rpath, mir_lpath, lpath, mir_lpath, ], "shift", 30, (0, halfsteps)
|
||||
|
19
software/path tool/src/path/forward.py
Normal file
19
software/path tool/src/path/forward.py
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps)
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [path, mir_path, path, mir_path, path, mir_path, ], "shift", 20, (0, halfsteps)
|
||||
|
25
software/path tool/src/path/forwardfast.py
Normal file
25
software/path tool/src/path/forwardfast.py
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle2_generator
|
||||
|
||||
g_steps = 20
|
||||
y_radius = 50
|
||||
z_radius = 30
|
||||
x_radius = 10
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
rpath = semicircle2_generator(g_steps, y_radius, z_radius, x_radius)
|
||||
lpath = semicircle2_generator(g_steps, y_radius, z_radius, -x_radius)
|
||||
|
||||
mir_rpath = deque(rpath)
|
||||
mir_rpath.rotate(halfsteps)
|
||||
|
||||
mir_lpath = deque(lpath)
|
||||
mir_lpath.rotate(halfsteps)
|
||||
|
||||
return [rpath, mir_rpath, rpath, mir_lpath, lpath, mir_lpath, ], "shift", 20, (0, halfsteps)
|
||||
|
118
software/path tool/src/path/lib.py
Normal file
118
software/path tool/src/path/lib.py
Normal file
@ -0,0 +1,118 @@
|
||||
from collections import deque
|
||||
import math
|
||||
import numpy as np
|
||||
|
||||
pi = math.acos(-1)
|
||||
|
||||
def semicircle_generator(radius, steps, reverse=False):
|
||||
assert (steps % 4) == 0
|
||||
halfsteps = int(steps/2)
|
||||
|
||||
step_angle = pi / halfsteps
|
||||
|
||||
result = []
|
||||
|
||||
# first half, move backward (only y change)
|
||||
for i in range(halfsteps):
|
||||
result.append((0, radius - i*radius*2/(halfsteps), 0))
|
||||
|
||||
# second half, move forward in semicircle shape (y, z change)
|
||||
for i in range(halfsteps):
|
||||
angle = pi - step_angle*i
|
||||
y = radius * math.cos(angle)
|
||||
z = radius * math.sin(angle)
|
||||
result.append((0, y, z))
|
||||
|
||||
result = deque(result)
|
||||
result.rotate(int(steps/4))
|
||||
|
||||
if reverse:
|
||||
result = deque(reversed(result))
|
||||
result.rotate(1)
|
||||
|
||||
return result
|
||||
|
||||
def semicircle2_generator(steps, y_radius, z_radius, x_radius, reverse=False):
|
||||
assert (steps % 4) == 0
|
||||
halfsteps = int(steps/2)
|
||||
|
||||
step_angle = pi / halfsteps
|
||||
|
||||
result = []
|
||||
|
||||
# first half, move backward (only y change)
|
||||
for i in range(halfsteps):
|
||||
result.append((0, y_radius - i*y_radius*2/(halfsteps), 0))
|
||||
|
||||
# second half, move forward in semicircle shape (y, z change)
|
||||
for i in range(halfsteps):
|
||||
angle = pi - step_angle*i
|
||||
y = y_radius * math.cos(angle)
|
||||
z = z_radius * math.sin(angle)
|
||||
x = x_radius * math.sin(angle)
|
||||
result.append((x, y, z))
|
||||
|
||||
result = deque(result)
|
||||
result.rotate(int(steps/4))
|
||||
|
||||
if reverse:
|
||||
result = deque(reversed(result))
|
||||
result.rotate(1)
|
||||
|
||||
return result
|
||||
|
||||
def get_rotate_x_matrix(angle):
|
||||
angle = angle * pi / 180
|
||||
return np.matrix([
|
||||
[1, 0, 0, 0],
|
||||
[0, math.cos(angle), -math.sin(angle), 0],
|
||||
[0, math.sin(angle), math.cos(angle), 0],
|
||||
[0, 0, 0, 1],
|
||||
])
|
||||
|
||||
def get_rotate_y_matrix(angle):
|
||||
angle = angle * pi / 180
|
||||
return np.matrix([
|
||||
[math.cos(angle), 0, math.sin(angle), 0],
|
||||
[0, 1, 0, 0],
|
||||
[-math.sin(angle), 0, math.cos(angle), 0],
|
||||
[0, 0, 0, 1],
|
||||
])
|
||||
|
||||
def get_rotate_z_matrix(angle):
|
||||
angle = angle * pi / 180
|
||||
return np.matrix([
|
||||
[math.cos(angle), -math.sin(angle), 0, 0],
|
||||
[math.sin(angle), math.cos(angle), 0, 0],
|
||||
[0, 0, 1, 0],
|
||||
[0, 0, 0, 1],
|
||||
])
|
||||
|
||||
def matrix_mul(m, pt):
|
||||
ptx = list(pt) + [1]
|
||||
return list((m * np.matrix(ptx).T).T.flat)[:-1]
|
||||
|
||||
def point_rotate_x(pt, angle):
|
||||
ptx = list(pt) + [1]
|
||||
return list((get_rotate_x_matrix(angle) * np.matrix(ptx).T).T.flat)[:-1]
|
||||
|
||||
def point_rotate_y(pt, angle):
|
||||
ptx = list(pt) + [1]
|
||||
return list((get_rotate_y_matrix(angle) * np.matrix(ptx).T).T.flat)[:-1]
|
||||
|
||||
def point_rotate_z(pt, angle):
|
||||
ptx = list(pt) + [1]
|
||||
return list((get_rotate_z_matrix(angle) * np.matrix(ptx).T).T.flat)[:-1]
|
||||
|
||||
def path_rotate_x(path, angle):
|
||||
return [point_rotate_x(p, angle) for p in path]
|
||||
|
||||
def path_rotate_y(path, angle):
|
||||
return [point_rotate_y(p, angle) for p in path]
|
||||
|
||||
def path_rotate_z(path, angle):
|
||||
return [point_rotate_z(p, angle) for p in path]
|
||||
|
||||
if __name__ == '__main__':
|
||||
pt = [0, 1, 0]
|
||||
print(point_rotate_z(pt, 270))
|
42
software/path tool/src/path/rotatex.py
Normal file
42
software/path tool/src/path/rotatex.py
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
from collections import deque
|
||||
import math
|
||||
|
||||
from lib import get_rotate_x_matrix as get_matrix
|
||||
|
||||
g_steps = 20
|
||||
|
||||
swing_angle = 15
|
||||
y_radius = 15
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
quarter = int(g_steps/4)
|
||||
|
||||
pi = math.acos(-1)
|
||||
|
||||
result = []
|
||||
step_angle = swing_angle / quarter
|
||||
step_offset = y_radius / quarter
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(swing_angle - i*step_angle)
|
||||
m[1,3] = -i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(-i*step_angle)
|
||||
m[1,3] = -y_radius + i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(i*step_angle-swing_angle)
|
||||
m[1,3] = i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(i*step_angle)
|
||||
m[1,3] = y_radius-i * step_offset
|
||||
result.append(m)
|
||||
|
||||
return result, "matrix", 50, (0, quarter*2)
|
42
software/path tool/src/path/rotatey.py
Normal file
42
software/path tool/src/path/rotatey.py
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
from collections import deque
|
||||
import math
|
||||
|
||||
from lib import get_rotate_y_matrix as get_matrix
|
||||
|
||||
g_steps = 20
|
||||
|
||||
swing_angle = 15
|
||||
x_radius = 15
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
quarter = int(g_steps/4)
|
||||
|
||||
pi = math.acos(-1)
|
||||
|
||||
result = []
|
||||
step_angle = swing_angle / quarter
|
||||
step_offset = x_radius / quarter
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(swing_angle - i*step_angle)
|
||||
m[0,3] = -i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(-i*step_angle)
|
||||
m[0,3] = -x_radius + i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(i*step_angle-swing_angle)
|
||||
m[0,3] = i * step_offset
|
||||
result.append(m)
|
||||
|
||||
for i in range(quarter):
|
||||
m = get_matrix(i*step_angle)
|
||||
m[0,3] = x_radius-i * step_offset
|
||||
result.append(m)
|
||||
|
||||
return result, "matrix", 50, (0, quarter*2)
|
25
software/path tool/src/path/rotatez.py
Normal file
25
software/path tool/src/path/rotatez.py
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
from collections import deque
|
||||
import math
|
||||
|
||||
from lib import get_rotate_x_matrix, get_rotate_y_matrix
|
||||
|
||||
g_steps = 20
|
||||
|
||||
z_lift = 4.5
|
||||
xy_radius = 1
|
||||
|
||||
def path_generator():
|
||||
|
||||
pi = math.acos(-1)
|
||||
|
||||
result = []
|
||||
step_angle = 2*pi / g_steps
|
||||
for i in range(g_steps):
|
||||
x = xy_radius * math.cos(i*step_angle)
|
||||
y = xy_radius * math.sin(i*step_angle)
|
||||
|
||||
m = get_rotate_y_matrix(math.atan2(x, z_lift)*180/pi) * get_rotate_x_matrix(math.atan2(y, z_lift)*180/pi)
|
||||
result.append(m)
|
||||
|
||||
return result, "matrix", 50, range(g_steps)
|
20
software/path tool/src/path/shiftleft.py
Normal file
20
software/path tool/src/path/shiftleft.py
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
from lib import path_rotate_z
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps)
|
||||
path = path_rotate_z(path, 90) # shift 90 degree to make the path "left" shift
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [path, mir_path, path, mir_path, path, mir_path, ], "shift", 20, (0, halfsteps)
|
20
software/path tool/src/path/shiftright.py
Normal file
20
software/path tool/src/path/shiftright.py
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
from lib import path_rotate_z
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps)
|
||||
path = path_rotate_z(path, 270) # shift 270 degree to make the path "right" shift
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [path, mir_path, path, mir_path, path, mir_path, ], "shift", 20, (0, halfsteps)
|
27
software/path tool/src/path/turnleft.py
Normal file
27
software/path tool/src/path/turnleft.py
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
from lib import path_rotate_z
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps)
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [
|
||||
path_rotate_z(path, 45),
|
||||
path_rotate_z(mir_path, 0),
|
||||
path_rotate_z(path, 315),
|
||||
path_rotate_z(mir_path, 225),
|
||||
path_rotate_z(path, 180),
|
||||
path_rotate_z(mir_path, 135),
|
||||
], "shift", 20, (0, halfsteps)
|
||||
|
27
software/path tool/src/path/turnright.py
Normal file
27
software/path tool/src/path/turnright.py
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
from collections import deque
|
||||
|
||||
from lib import semicircle_generator
|
||||
from lib import path_rotate_z
|
||||
|
||||
g_steps = 20
|
||||
g_radius = 25
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
halfsteps = int(g_steps/2)
|
||||
|
||||
path = semicircle_generator(g_radius, g_steps)
|
||||
|
||||
mir_path = deque(path)
|
||||
mir_path.rotate(halfsteps)
|
||||
|
||||
return [
|
||||
path_rotate_z(path, 45+180),
|
||||
path_rotate_z(mir_path, 0+180),
|
||||
path_rotate_z(path, 315+180),
|
||||
path_rotate_z(mir_path, 225+180),
|
||||
path_rotate_z(path, 180+180),
|
||||
path_rotate_z(mir_path, 135+180),
|
||||
], "shift", 20, (0, halfsteps)
|
||||
|
35
software/path tool/src/path/twist.py
Normal file
35
software/path tool/src/path/twist.py
Normal file
@ -0,0 +1,35 @@
|
||||
|
||||
from collections import deque
|
||||
import math
|
||||
|
||||
from lib import get_rotate_x_matrix, get_rotate_z_matrix
|
||||
|
||||
g_steps = 20
|
||||
|
||||
raise_angle = 3
|
||||
twist_x_angle = 20
|
||||
twise_y_angle = 12
|
||||
|
||||
def path_generator():
|
||||
assert (g_steps % 4) == 0
|
||||
|
||||
result = []
|
||||
|
||||
quarter = int(g_steps / 4)
|
||||
step_x_angle = twist_x_angle / quarter
|
||||
step_y_angle = twise_y_angle / quarter
|
||||
|
||||
m = get_rotate_x_matrix(raise_angle)
|
||||
for i in range(quarter):
|
||||
result.append(m * get_rotate_z_matrix(i*step_x_angle) * get_rotate_x_matrix(i*step_y_angle))
|
||||
|
||||
for i in range(quarter):
|
||||
result.append(m * get_rotate_z_matrix((quarter-i)*step_x_angle) * get_rotate_x_matrix((quarter-i)*step_y_angle))
|
||||
|
||||
for i in range(quarter):
|
||||
result.append(m * get_rotate_z_matrix(-i*step_x_angle) * get_rotate_x_matrix(i*step_y_angle))
|
||||
|
||||
for i in range(quarter):
|
||||
result.append(m * get_rotate_z_matrix((-quarter+i)*step_x_angle) * get_rotate_x_matrix((quarter-i)*step_y_angle))
|
||||
|
||||
return result, "matrix", 50, [0, 10]
|
Reference in New Issue
Block a user