Source code for pyturbo.helper.arc

from math import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from .convert_to_ndarray import convert_to_ndarray

[docs] class arc(): def __init__(self,xc,yc,radius,alpha_start,alpha_stop): self.x = xc self.y = yc self.radius = radius self.alpha_start = alpha_start self.alpha_stop = alpha_stop self.sortY = False self.sortYasc = True def get_point(self,t): t = convert_to_ndarray(t) alpha = (self.alpha_stop-self.alpha_start)*t + self.alpha_start x,y = np.zeros(len(t)),np.zeros(len(t)) for i in range(len(alpha)): x[i] = self.x + self.radius*cos(radians(alpha[i])) y[i] = self.y + self.radius*sin(radians(alpha[i])) # Check sorting if (self.sortY): alpha_test = (self.alpha_start-self.alpha_stop)*t + self.alpha_stop x_test = self.x + self.radius*cos(radians(alpha_test)) y_test = self.y + self.radius*sin(radians(alpha_test)) if (self.sortYasc==1): # sort ascending # check the start and end to see if y<y_test if (y_test[-1]<y[-1]): x = x_test; y = y_test; else: # sort descending if (y_test[-1]>y[-1]): x = x_test; y = y_test; return x,y def get_deriv(self,t): [x,y] = self.get_point(t) dx = -(y-self.y) dy = x-self.x def plot(self,color='b'): t = np.linspace(0,1,20) [x, y] = self.get_point(t) fig1, ax1 = plt.subplots() ax1.plot(x, y, color=color, linestyle='-') ax1.plot(self.x, self.y, color='k', marker='o') plt.show()
[docs] def arclen(x,y): """ Computes the length between points Inputs x,y - this can be a list or a numpy array but not a scalar """ x = convert_to_ndarray(x) y = convert_to_ndarray(y) if (len(x)<2): return 0 dx,dy = np.diff(x,axis=0), np.diff(y,axis=0) L = np.sqrt(dx*dx+dy*dy) L = np.insert(L,0,0) return L
[docs] def arclen3(x,y,z): """ Equally space points along a bezier curve using arc length """ x = convert_to_ndarray(x) y = convert_to_ndarray(y) z = convert_to_ndarray(z) if (len(x)<2): return 0 dx,dy,dz = np.diff(x,axis=0), np.diff(y,axis=0), np.diff(z,axis=0) L = np.sqrt(dx*dx+dy*dy+dz*dz) L = np.insert(L,0,0) return L