�ڎ�
���߂�ꂽ�_���猈�߂�ꂽ�p�x�Ō��߂�ꂽ�����i�ށA�Ƃ������Ƃ��J��Ԃ��ċȐ��i�����̏W�܂�j��`���Z�@���^�[�g���O���t�B�b�N�X�Ƃ����B���Ƃ��A����_����X�^�[�g���āu�P�i���90�x�E��]����v�Ƃ���������4��J��Ԃ��ƒP�ʐ����`���`����B
���́A�^�[�g���O���t�B�b�N�X����������N���X�̗�ł���B
now �����݂̍��W�_�Adirection �����݂̕������L������B�����̒P�ʂ́u�x�v�Ƃ���BsetDirection�j�A������ς���iturn�j�A�i�ށiwalk�j�A�����isetPoint�j��4�̃��\�b�h����`����Ă���Bclass Turtle {
double direction; // �p�x�A�x���\��
Vector2 now; // ���ݒn
Turtle() {
direction = 0;
now = new Vector2(0, 0);
}
public void reset() {
direction = 0;
now = new Vector2(0, 0);
}
public Vector2 getPoint() {
return now;
}
public double getdirection() {
return direction;
}
// ���W�̐ݒ�i�ړ��j
public void setPoint(Vector2 z) {
now = z;
}
// �����̐ݒ�idirection �̒P�ʂ̓��W�A���ł͂Ȃ��āu�x�v�j
public void setDirection(double direction) {
this.direction = direction;
}
// �����]���itheta �̒P�ʂ̓��W�A���ł͂Ȃ��āu�x�v�j
public void turn(double theta) {
direction = mod360(direction + theta);
}
// �w�肵���������ړ��i�����͕ς��Ȃ��j
public void walk(double step) {
now = new Vector2(step*Math.cos(radian(direction)) + now.x,
step*Math.sin(radian(direction)) + now.y);
}
// �x�����烉�W�A���ɕϊ�
public double radian(double angle) {
return 2 * Math.PI * angle / 360;
}
// �������O�x����360�x�͈̔͂Ɏ��߂�
double mod360(double angle) {
while (angle < 0) {
angle += 360;
}
while (angle >= 360) {
angle -= 360;
}
return angle;
}
}
class Vector2 {
double x, y;
Vector2(double x, double y) {
this.x = x;
this.y = y;
}
}
�Ⴆ�A��8�p�`��`���ɂ́A�u��苗���i���45�x�E��]����v�Ƃ������Ƃ�8��J��Ԃ��Ηǂ��̂ŁA���̂悤�ɂ���BgetPoint �͌��݂̍��W�_���擾���郁�\�b�h�ł���B
Turtle t = new Turtle();
t.reset();
Vector2 v = t.getPoint();
for(int i=0; i<8; i++) {
t.walk(1);
// v �� t.getPoint() �����Ԑ�����`��
v = t.getPoint();
t.turn(45);
}
}
�T�̓�������ʂɎ��߂邽�߂ɂ́A�S�������I��������ƁA���̋O�Ղ���͈͂��v�Z���ĕ`�������Ȃ��B���̂��߂ɁA�����z�� ArrayList �f�[�^�\���𗘗p����B
Turtle t = new Turtle();
ArrayList<Vector2> ar = new ArrayList<Vector2>();
t.reset();
ar.add(t.getPoint());
for(int i=0; i<8; i++) {
t.walk(1);
ar.add(t.getPoint()); t.turn(45);
}
draw(ar);
}
// �S���̃f�[�^����͈͂��v�Z���A��ʂɎ��܂�悤�ȏk�ڗ����v�Z����
void draw(ArrayList<Vector2> r) { Graphics g = getGraphics();
// �͈͂��v�Z
double xa = r.get(0).x, xz = r.get(0).x, ya = r.get(0).y, yz = r.get(0).y; for(int i=1; i<r.size(); i++) { if(r.get(i).x < xa) xa = r.get(i).x;
if(r.get(i).x > xz) xz = r.get(i).x; if(r.get(i).y < ya) ya = r.get(i).y; if(r.get(i).y > yz) yz = r.get(i).y; } double z = Math.max(xz - xa, yz - ya);
// (40,40)- (440,440) �͈̔͂ŕ`��
int ax = 40 + (int)(400 * (r.get(0).x - xa) / z); int ay = 40 + (int)(400 * (r.get(0).y - ya) / z); for(int i=1; i<r.size(); i++) { int bx = 40 + (int)(400 * (r.get(i).x - xa) / z); int by = 40 + (int)(400 * (r.get(i).y - ya) / z); g.drawLine(ax,ay, bx, by); ax = bx; ay = by; } g.dispose(); }
������3�������āA�^�̕������A������ӂƂ��鐳�O�p�`��2�ӂŒu��������i�����}�j�B�������{�}�`�Ƃ��A���̐}�`�̊e�Ӂi���̏ꍇ�͂S�j���k��������{�}�`�Œu��������i�����}�j�B����ɂ��̐}�`�̊e�Ӂi16����j���k��������{�}�`�Œu��������i���E�}�j�B
�@�@�@�@�@
���̑����K���ȉJ��Ԃ��ƁA���̂悤�Ȑ}��������B���̂悤�ɂ��ē�����܂�����R�b�z�Ȑ��A�J��Ԃ��̉����̋Ȑ��̎����Ƃ����B
�@�@�@�@�@
��{�}�`�͎��̂悤�ɂ��ĕ`�����Ƃ��ł���B
�e�X�e�b�v�ŁA��苗���i�ށi����������i�ށj�̕������u��{�}�`��`���v�ɒu�������邱�ƂŁA�R�b�z�Ȑ���`�����Ƃ��o����B
���́A��ō쐬����Turtle�N���X�̃N���X���\�b�h���g���Ď���������ł���B��{�}�`�̈ꕔ����{�}�`�Œu��������Ƃ�������́A�ċA�Ăяo�����g���Ď����ł���Bdegree �͍ċA�̉�\���B
public void Kochsub(int degree, double step) {
if (degree == 0) {
t.walk(step);
// walk �̎n�_�ƏI�_�����Ԑ�����`��
} else {
Kochsub(degree - 1, step/3);
t.turn(-60);
Kochsub(degree - 1, step/3);
t.turn(120);
Kochsub(degree - 1, step/3);
t.turn(-60);
Kochsub(degree - 1, step/3);
}
}
���邢�́A��̒[�_(x1, y1), (x5, y5) ������{�}�`��3�̐܂���̒��_���w�肵�Ă��`�����Ƃ��ł���Bu = (x5 - x1)/3, v = (y5 - y1)/3, t = tan-1((y5 - y1)/(x5 - x1)) �Ƃ��āAx2 = x1+ u, y2 = y1 + v; x4 = x1+ 2u, y4 = y1 + 2v; x3 = x1+ (x5 - x1) cos(t+��/6) / cos(t) / ��3, y3 = y1+ (y5 - y1) sin(t+��/6) / sin(t) / ��3 �ƒu���ƁA(x1, y1), (x2, y2), (x3, y3), (x4, y4), (x5, y5) �����Ɍ����̂���{�}�`�ɂȂ�B
�����̗אڂ���2�_�Ԃ��Ō��ԑ���Ɋ�{�}�`�ɒu��������Ə�̐^�̐}�̂悤�ɂȂ�B���̎菇���J��Ԃ��A�R�b�z�Ȑ����`����B�ċA���ŕ\������ƁA�Ⴆ�Ύ��̂悤�ɕ\�����B
// �ċA��
public void koch(double x1, double y1, double x5, double y5, int m) {
if(m == 0) {
// ���� (x1,y1) - (x5,y5) ������
return;
}
double u = (x5 - x1) / 3;
double v = (y5 - y1) / 3;
double t = Math.atan((y5-y1) / (x5-x1)); double x3 = x1 + (x5-x1) * Math.cos(t+Math.PI/6) / Math.cos(t) / Math.sqrt(3.0);
double y3 = x1 + (y5-y1) * Math.sin(t+Math.PI/6) / Math.sin(t) / Math.sqrt(3.0); koch(x1, y1, x1+u, y1+v, m-1);
koch(x1+u, y1+u, x3, y3, m-1);
koch(x3, y3, x1+2*u, y1+2*v, m-1);
koch(x1+2*u, y1+2*v, x5, y5, m-1);
}
�p�x��i�ދ����������_���ɂ���ƁA���ۂ̊C�ݐ��̂悤�Ȏ��R�E�̋Ȑ��ɋ߂����̂�������B���Ƃ��A����0����90�܂ł̃����_���Ȑ��� x, y �Ƃ��āAx �x���ɁA-x-y �x�E�ɁAy �x���ɕ����]������A�ƒu�������ăR�b�z�Ȑ����ǂ���`�������̂ł���B
�@�@�@�@�@
�����̒��_���܂�ŏ�Ɉ����グ�A�����}�̂悤�Ȓ��p�ӎO�p�`��2�ӂƂȂ�悤�ɂ������̂���{�}�`�Ƃ��A�R�b�z�Ȑ��Ɠ����悤�ɁA�V���ɏo������������{�Ȑ��Œu��������i�������A�������t�j�Ƃ���������J��Ԃ��Ăł����܂�����h���S���Ȑ��ƌĂԁB
�@�@�@�@�@
�Ⴆ�A���͂��̑����12��J��Ԃ������ʓ���ꂽ���̂ł���i12���̃h���S���Ȑ��j�B
�@�@�@�@�@
�@�@�u����_����45�x��������ς��āA�P�P�ʐi�݁A90�x�E������ς���1�P�ʐi�݁A45�x���Ɍ�����ς���v
�Ƃ����������h�^�Ƃ��AI�^�́u�E�v�Ɓu���v����ꊷ����
�@�@�u����_����45�x�E������ς��āA�P�P�ʐi�݁A90�x��������ς���1�P�ʐi�݁A45�x�E�Ɍ�����ς���v
�Ƃ���������II�^�Ƃ���B
�h�^�ɑ����āu90�x�E������ς��v�Ă���II�^�����s����Ə�̐^�̐}���`����B����ɁA�h�^�A�h�h�^�̋L�q�Ɋ܂܂��ŏ��́u1�P�ʐi�݁v���uI�^�����s���v�ɒu�������A2�Ԗڂ́u1�P�ʐi�݁v���u�hI�^�����s���v�ɒu������ƁA��̉E�̐}��������B
��ō쐬���� Turtle�N���X�̃N���X���\�b�h���g���Ă�������������̂����̃v���O������ł���Bdegree �͍ċA�̉�\���B
public void dragonsub(int degree, double step, int rot) {
if (degree == 0) {
t.walk(step);
// walk �̎n�_�ƏI�_�����Ԑ�����`��
} else {
t.turn(-45*rot);
dragonsub(degree - 1, step/Math.sqrt(2), 1);
t.turn(90*rot);
dragonsub(degree - 1, step/Math.sqrt(2), -1);
t.turn(-45*rot);
}
}
a, b �������_���Ȑ��Ɏ��A�u45�x�A90�x�A45�x�v�̑���Ɂua �x�Aa+b �x�Ab �x�v�ɒu��������ƁA���̂悤�Ȏ��R�E�Ɍ�����}�`�̂悤�Ȃ��̂��`����B
�@�@�@�@�@
�h��Ԃ������O�p�`����A�e�Ђ̒��_������ŏo���鐳�O�p�`�́i�ӂ��c���āj���������B��ӂ������̎O�̐��O�p�`���ꂼ��ɑ��ē���������{���A�Ƃ������Ƃ��i�����Ɂj�J��Ԃ��ƁA���̐}�̂悤�Ȍ����炯�̎O�p�`���ł���B���̐}�`�̓V�F���s���X�L�[�̃K�X�P�b�g�ƌĂ��B�ǂ�ȓ_�̋߂��ł��g�傷��ƌ��̐}�`���o������Ƃ����Ӗ��ŁA�R�b�z�Ȑ��Ɠ����悤�Ȑ����������Ă���B
������^�[�g���O���t�B�b�N�X���g���Ď��̂悤�ɍċA�I�ɕ`�����Ƃ��ł���B��{�}�`�͐��O�p�`�ŁA�u1�P�ʐi���120�x������v�Ƃ������Ƃ�3��J��Ԃ��B�i�ޑO�ɂ��̓_���������Ƃ���傫���������̃K�X�P�b�g��`���Ƃ�����Ƃ�lj����Ă��Ηǂ��B
�@�@�@�@�@
���́A�V�F���s���X�L�[�̃K�X�P�b�g��`���v���O�����̗�ł���B
public void sierpsub(int m, double step) {
if(m == 0) return;
sierpsub(m-1, step/2); // ��ӂ������̃K�X�P�b�g��`��
t.walk(step); // ���߂�ꂽ�����i��
// �������Ղ̒�����`��
t.turn(-120); // 12�x������A����������2��J��Ԃ�
sierpsub(m-1, step/2);
t.walk(step);
// �������Ղ̒�����`��
t.turn(-120);
sierpsub(m-1, step/2);
t.walk(step);
// �������Ղ̒�����`��
t.turn(-120);
}
�̎}������̂悤�ȉ����}����{�}�`�Ƃ��A���̕ʂꂽ�Q�{�̎}����{�}�`�ɒu��������Ɖ����}�̂悤�ɂȂ�A��[�̂S�{�̎}����{�}�`�ɒu��������Ɖ��E�}��������B���̑���𑱂���ƁA�̌`�������}������}��������B���̂悤�Ȑ}�`�����`�} tree �Ƃ����B
�@�@�@�@�@
�R�b�z�Ȑ���`���̂Ɠ��l�ɁA�^�[�g���O���t�B�b�N�X���ċA�I�Ɏg���ƁA���̎��`�}��������Ba, b �����ꂼ�ꍶ�}�A�E�}�̎}������̊p�x�Ƃ��Ac, d �����ꂼ��A���Ǝ}�̒����Ƃ���ƁA��{�}�`�͎��̂悤�ɂ��ĕ`����B
�@�@�@c �i�݁A���� a �x������ d �i�݁A�}������n�_�ɖ߂�Aa+b �x�E���� d �i�݁A�i�}������n�_�̖߂�jb �x������
�ud �i�ށv�Ƃ������{�}�`�ɒu��������Ə�̒��}�������A����ɂ��̐�[�̎}����{�}�`�ɒu��������Ə�̉E�}��������B���́A�}�̒������ċA�̎����Ƃ����ꍇ�̃v���O������ł���B �Ƃ����Ba, b �����ꂼ�� angle, angle2setPoint �͌��ݒn��ύX���郁�\�b�h�ł���B
public void treesub(int degree, double angle, double angle2) {
t.walk(degree);
// �����Ŏ}�̎n�_�ƏI�_�����Ԑ���`��
Vector2 v = t.getPoint();
if (degree == 1) {
return;
}
t.turn(-angle);
treesub(degree - 1, angle, angle2);
t.setPoint(v);
t.turn(angle+angle2);
treesub(degree - 1, angle, angle2);
t.setPoint(v);
t.turn(-angle2);
}
�Ⴆ�A���� a = 20, b = 15 �Ƃ��āA���̑����12��J��Ԃ������ʓ���ꂽ���̂ł���B
�@�@�@�@�@
�}�̒����������_���ɂ���ƁA���̂悤�Ȏ��R�E�̖̂悤�Ȑ}��������B
�@�@�@�@�@
�����`���A���̒Z�ӂɕ��s�ȃ����_���Ȓ����ɂ���ē�̒����`�ɕ�����A�Ƃ���������A�V���ɐ�������钷���`�ɑ��Ă��K�p����ƁA���}�̂悤�Ȑ}�`���o����B����4��̑����24�̒����`�ɁA�E��8��̑����28�̒����`�ɕ�������Ă���B
�@�@�@�@�@
��{����͎��ŗ^������B�����`�̖k�����̍��W�� (x1, y1)�A�쓌���̍��W�� (x2, y2) �Ƃ���B
���̊�{�菇���A�������ꂽ��̒����`�ɓK�p����A�Ƃ����ċA�Ăяo�����g���A��̂悤�Ȑ}�`��`�����Ƃ��o����B�ċA���I��点�邽�߂ɁA�ċA�̐[�����p�����[�^�Ƃ��Ēlj�����Ηǂ��B��������������̂����̃v���O������ł���BVector2 �́A2�����̍��W�_�idouble�^�j��\���f�[�^�^�ł���Bm �͍ċA�̃��x�����L������B
// �ċA��
public void rectsub(Vector2 u, Vector2 w, int m) { if(m == 0) return; if(w.x - u.x > w.y - u.y) { double x = Math.random()*(w.x-u.x) + u.x;
// �_(x, u.y)�Ɠ_(x, w.y)������ rectsub(u, new Vector2(x, w.y), m-1); rectsub(new Vector2(x, u.y), w, m-1); } else { double y = Math.random()*(w.y-u.y)+ u.y;
// �_(u.x, y)�Ɠ_(w.x, y)������ rectsub(u, new Vector2(w.x, y), m-1); rectsub(new Vector2(u.x, y), w, m-1); } }
c �f���Ƃ��āA���f���̑Q�����u zn+1 = zn2 + c, z0 = 0�v���v�Z�����Ƃ��Azn �����U���Ȃ��悤�� c �̑S�̂��}���f���u���W���Ƃ����B�����}�̍����h��ꂽ�������}���f���u���W���ł���i[-2, 0.5] x [-1, 1] �͈̔͂�������Ă���j�B���̈ꕔ���g�債�����̂�^�̐}�A����ɂ��̈ꕔ���g�債�����̂��E�}�Ɏ����B�ǂ�ȂɊg�債�Ă��A�����悤�Ȑ}�`�������B���̂悤�Ȑ������t���N�^���Ƃ����B
���ȊO�̕����ł͔��U���邪�A���̐F�̈Ⴂ�́A���U�̑����ɉ����ĕʁX�̐F��z�F�������ʂł���B�}���f���u���W���̎��ӂŊg�債���}�ɍׂ��ȐF�̈Ⴂ������̂́Ac �̂�����Ƃ����Ⴂ�ł��A���U�̃p�^�[�����ɒ[�ɈقȂ�Ƃ����t���N�^���������邱�Ƃ������Ă���B
�@�@
�}���f���u���W����`���ɂ́A�K���ɑ傫�Ȓl L �ƓK���ɑ傫�ȉ��} N ��^���A���f���ʂ̊e�_�� c �Ƃ��āA�Q�������v�Z���AzN �̐�Βl�� L ���Ȃ����̂�������Ηǂ��B���� n �� zn �� L ������A���� n ��K���ȐF�R�[�h�ɕϊ����A���F����B
���́A���̃v���O�����̗�ł���BComplex �� double�^��2�����x�N�g������Ȃ�f�[�^�^�i���f����\���j�AComplex.add �͕��f���̑����Z�AComplex.mult �͕��f���̊|���Z�A Complex.abs2 �͕��f���̐�Βl��2����v�Z����Bsize �̓O���t�B�b�N�̈�̑傫����\���Afor-(i,j) ���ŁA�e�s�N�Z�����ɕ��f����Ή������A�Q�����̎������U���v�Z���Ă���Bfor-k �\���� if ���Ŕ��U�����Ƃ��Ƀ��[�v���甲����悤�ɂ��Ă���B���[�v���甲�����Ƃ��� k �̒l�� r,g,b �֕ϊ�����v�Z���@�ɂ���āA��ۂ̈Ⴄ�}��������B
public void Mandelblotsub(Complex zmin, Complex zmax, int lim, double cov) {
double dx = (zmax.re - zmin.re) / size.width;
double dy = (zmax.im - zmin.im) / size.height;
Complex z, w, c;
for(int i=0; i<size.width; i++) {
for(int j=0; j<size.height; j++) {
c = zmin.add(new Complex(i*dx, j*dy));
z = new Complex(0,0);
int k;
for(k=0; k<lim; k++) {
w = c.add(z.mult(z)); // z = z^2 + c
if(w.abs2() > cov*cov) break;
z = w;
}
int r = (k % 11) * (256/11);
int G = (k % 8) * (256/8);
int b = (k % 19) * (256/19);
if(k == lim) {r = G = b = 0;}
gr.setColor(new Color(r,G,b));
gr.drawOval(i, j, 1, 1);
}
}
repaint();
}
�Q������K���ɑւ��邱�Ƃɂ��A�}���f���u���W���Ɠ����悤�ȃt���N�^���}�`��`�����Ƃ��ł���B
�K���ȏ����l����n�߂āA�Q�����Fxn+1 = a xn + b yn + c; yn+1 = d xn + e yn + f �ɂ���ē_�� {(xn, yn)} �����o���B�Ⴆ�Aa = d = r cos(t), c = -b = r sin(t), c = f = 0 �Ƃ���ƁA��]���Ȃ���g��ir > 1 �̏ꍇ�j�A���邢�͏k���ir < 1 �̏ꍇ�j���Ă����_�`�����Bt = 2��/ �Ӂi�������A�ӂ͉�����i1.618...�j�j, r = 0.999 �Ƃ���ƁA���̍��̐}��������B�E�̐}�͂Ђ܂��̉Ԃ̎ʐ^�ł���B
�@�@�@�@�@