ハイポサイクロイドの媒介変数表示です。 定円の半径を \( 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);
}
}