From eef587ca521f0b4485521d07f10df54f68e5ccb9 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Sat, 7 Sep 2024 23:52:51 +0800 Subject: [PATCH] update task4 --- A/4/kinematics_check.py | 12 +++++++++--- A/4/simulator.py | 8 +++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/A/4/kinematics_check.py b/A/4/kinematics_check.py index 3f61a25..f66baa0 100644 --- a/A/4/kinematics_check.py +++ b/A/4/kinematics_check.py @@ -9,11 +9,17 @@ from matplotlib.patches import Rectangle import multiprocessing -class GoodOrbit(Orbit): +class BetterOrbit(Orbit): def __init__(self): self.kAlpha = mp.mpf("1.7") / (2 * mp.pi) - self.kCriticalTheta = 2.86 / ((2 / 3) * self.kAlpha) - 0.1 + def f(x): + r=(1/3)*self.kAlpha*mp.sqrt(1+x**2) + phi=mp.atan(x) + L=mp.mpf("2.86") + return (r+3*r*mp.cos(mp.pi-2*phi)-L)**2+(3*r*mp.sin(mp.pi-2*phi))**2-L**2 + self.kCriticalTheta = mp.findroot(f, 15, solver='secant') + print(f"CriticalTheta={self.kCriticalTheta}", file=sys.stderr) self.r = (1 / 3) * self.kAlpha * mp.sqrt(1 + self.kCriticalTheta**2) self.point_A_cartesian = ( self.kAlpha * self.kCriticalTheta * mp.cos(self.kCriticalTheta), @@ -179,7 +185,7 @@ class GoodOrbit(Orbit): if __name__ == "__main__": - orbit = GoodOrbit() + orbit = BetterOrbit() loong = Loong(orbit, 224, mp.mpf("2.0"), mp.mpf("1e-8")) res_list = [] for ti in np.arange(5, 10, 0.025): diff --git a/A/4/simulator.py b/A/4/simulator.py index 99670da..b2d409c 100644 --- a/A/4/simulator.py +++ b/A/4/simulator.py @@ -13,7 +13,13 @@ class GoodOrbit(Orbit): def __init__(self): self.kAlpha = mp.mpf("1.7") / (2 * mp.pi) - self.kCriticalTheta = 2.86 / ((2 / 3) * self.kAlpha) + def f(x): + r=(1/3)*self.kAlpha*mp.sqrt(1+x**2) + phi=mp.atan(x) + L=mp.mpf("2.86") + return (r+3*r*mp.cos(mp.pi-2*phi)-L)**2+(3*r*mp.sin(mp.pi-2*phi))**2-L**2 + self.kCriticalTheta = mp.findroot(f, 15, solver='secant') + print(f"CriticalTheta={self.kCriticalTheta}", file=sys.stderr) self.r = (1 / 3) * self.kAlpha * mp.sqrt(1 + self.kCriticalTheta**2) self.point_A_cartesian = ( self.kAlpha * self.kCriticalTheta * mp.cos(self.kCriticalTheta),