From d56a3d77473f836ed828b65e264483a3d11563e8 Mon Sep 17 00:00:00 2001 From: Alexander Rossmanith Date: Fri, 7 Aug 2026 20:19:20 +0530 Subject: [PATCH] initial commit --- Turning Radius.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Turning Radius.py diff --git a/Turning Radius.py b/Turning Radius.py new file mode 100644 index 0000000..f2a8b84 --- /dev/null +++ b/Turning Radius.py @@ -0,0 +1,69 @@ +import math +import matplotlib.patches +import matplotlib.pyplot +import numpy + + +def rotationmatrix(angle): + s = math.sin(angle) + c = math.cos(angle) + return numpy.matrix([[c,-s],[s,c]]) + + +class Car: + def __init__(self, length, width, wheelbase, front_overhang, trackwidth, outer_turningradius): + self.length = length + self.width = width + self.wheelbase = wheelbase + self.front_overhang = front_overhang + self.trackwidth = trackwidth + self.outer_turningradius = outer_turningradius + + @property + def rear_overhang(self): + return self.length - self.wheelbase - self.front_overhang + + @property + def innerturningradius(self): + xo = self.wheelbase + self.front_overhang + ro = self.outer_turningradius + yo = math.sqrt(ro*ro - xo*xo) + yi = yo - self.width + return yi + + @property + def boundingpoly(self): + x0 = 0 + x1 = self.width + y0 = self.rear_overhang + y1 = -self.wheelbase - self.front_overhang + return numpy.array([[x0, y0], [x1, y0], [x1, y1], [x0,y1]]) + + +def paint_car(ax, car, pos, angle): + poly = car.boundingpoly * rotationmatrix(angle) + pos + ax.add_patch(matplotlib.patches.Polygon( + poly, closed=True, facecolor='none', edgecolor='blue')) + + +def main(): + kuv100 = Car(3.700, 1.735, 2.385, 0.800, 1.490, 5.050) + print('rear overhang: ', kuv100.rear_overhang) + print('inner turning radius: ', kuv100.innerturningradius) + fig, ax = matplotlib.pyplot.subplots(1, 1, subplot_kw={'aspect': 'equal'}) + ax.set_xlim(-4,6) + ax.set_ylim(-5,5) + ri = kuv100.innerturningradius + print(ri) + ax.plot(0,0,'go') + for angle in range(-90, 1, 30): + angle = math.radians(angle) + x = ri * math.cos(angle) + y = -ri * math.sin(angle) + paint_car(ax, kuv100, (x,y), angle) + ax.plot(x,y,'ro') + matplotlib.pyplot.show() + + +if __name__ == '__main__': + main()