円を移動させます。
定円の半径は、\( 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;
}
}
}