エピサイクロイド

転がる円

円を移動させます。

定円

定円の半径は、\( 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));

TestMyEpiCycloid02.java

全ソースです。

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;
		}
	}
}

[前へ] [戻る] [次へ]