円を移動させます。
定円の半径は、\( r_c \) です。 中心は原点です。
double rc = 1.0; // 定円 MyPoint p1 = new MyPoint(); // 定円 p1.set(sc.g(0, 0)); g2.draw(sp.Circle(p1, sc.gd(rc)));
定円に外接して動く動円の半径は、\( r_m \) です。 中心は円を描きます。 そこで、中心を求めるために MyCircle クラスを利用します。
double rm = 1.0; // 動円 MyCircle mc = new MyCircle(); mc.init(0, 0, rc + rm); // 動円 p1.set(sc.g(mc.cf(x))); r = sc.gd(rm); g2.setColor(Color.green); g2.draw(sp.Circle(p1, r));
全ソースです。
import java.awt.Color; import java.awt.Graphics2D; import myMath.MyCircle; import myMath.MyEpiCycloid; import myMath.Tpl10; public class TestMyEpiCycloid02 extends Tpl10 { // 円・秒 int t = 0; double rc = 1.0; // 定円 double rm = 1.0; // 動円 public void init() { tr.move(getWidth() / 2, getHeight() / 2); tr.set(1, 0, 0, -1); tr.scale(30); setTimer(10); } public void draw(Graphics2D g2) { MyEpiCycloid mp = new MyEpiCycloid(); MyCircle mc = new MyCircle(); double x, r; mp.set(rc, rm); mc.set(0, 0, rc + rm); x = Math.toRadians(t); // 軸 g2.setColor(Color.black); g2.draw(tr.LineX()); g2.draw(tr.LineY()); // 定円 g2.setColor(Color.blue); g2.draw(tr.Circle(0, 0, rc)); // 動円 r = rm; g2.setColor(Color.green); mc.p(x); g2.draw(tr.Circle(mc.x, mc.y, r)); draw(mp, 0, x); t++; if (t > 360) { t = 0; } } }