ハイポサイクロイドの媒介変数表示です。 定円の半径を \( r_c \), 動円の半径を \( r_m \) とします。
\[ \begin{cases} x = (r_c - r_m) \cos t + r_m \cos \left( \frac{ r_c - r_m }{ r_m } t \right) \\ y = (r_c - r_m) \sin t - r_m \sin \left( \frac{ r_c - r_m }{ r_m } t \right) \end{cases} \]package myMath; // ハイポサイクロイドの媒介変数表示 public class MyHypoCycloid extends MyCurve { private double rc; // 定円 private double rm; // 動円 // コンストラクタ public MyHypoCycloid() { rc = rm = 1; } public void set(double rc, double rm) { this.rc = rc; this.rm = rm; } public void p(double t) { x = (rc - rm) * Math.cos(t) + rm * Math.cos((rc / rm - 1) * t); y = (rc - rm) * Math.sin(t) - rm * Math.sin((rc / rm - 1) * t); } }
定円の直径とアステロイドを描いてみます。
import java.awt.Color; import java.awt.Graphics2D; import myMath.MyHypoCycloid; import myMath.Tpl20; public class TestMyHypoCycloid extends Tpl20 { public void draw2(Graphics2D g2) { MyHypoCycloid mf = new MyHypoCycloid(); g2.setColor(Color.red); mf.set(2, 1); // 定円の直径 draw(mf, 0, 2 * Math.PI); g2.setColor(Color.yellow); mf.set(4, 1); // アステロイド draw(mf, 0, 2 * Math.PI); } }