定円の半径を \( 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 MyEpiCycloid extends MyCurve {
private double rc; // 定円
private double rm; // 動円
// コンストラクタ
public MyEpiCycloid() {
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.MyEpiCycloid;
import myMath.Tpl20;
public class TestMyEpiCycloid extends Tpl20 {
public void draw2(Graphics2D g2) {
MyEpiCycloid mf = new MyEpiCycloid();
g2.setColor(Color.red);
mf.set(1, 1); // カージオイド
draw(mf, 0, 2 * Math.PI);
g2.setColor(Color.yellow);
mf.set(2, 1); // ネフロイド
draw(mf, 0, 2 * Math.PI);
}
}