3D分形

画正方体的3D分形
private void Digui(Point p0, int width) {
Point p1 = new Point();
Point p2 = new Point();
Point p3 = new Point();
Point p4 = new Point();
Point pa = new Point();
Point pb = new Point();
Point pc = new Point();
Point pd = new Point();
for (int i = 2; i >=0; i--) {
for (int j =2; j >= 0; j--) {
for (int k = 0; k < 3; k++) {
p1.x = (int) (p0.x + width / 3 * k + j
* ((width - width / 4) / 3 * 1.41 / 2));
p1.y = (int) (p0.y - j
* ((width - width / 4) / 3 * 1.41 / 2) + i * width
/ 3);
p2.x = (int) (p0.x + width / 3 * (k + 1) + j
* ((width - width / 4) / 3 * 1.41 / 2));
p2.y = p1.y;

p3.x = p2.x;
p3.y = p2.y + width / 3;

p4.x = p1.x;
p4.y = p3.y;

pa.x = (int) (p1.x + ((width - width / 4) / 3 * 1.41 / 2));
pa.y = (int) (p1.y - ((width - width / 4) / 3 * 1.41 / 2));

pb.x = pa.x + width / 3;
pb.y = pa.y;

pc.x = pb.x;
pc.y = pb.y + width / 3;

pd.x = pa.x;
pd.y = pc.y;

if (i != 1 && k != 1 || i != 0 && k != 1 && j != 1
|| j != 1 && k != 2 && i != 1 || k != 0 && i != 1
&& j != 1 || i != 2 && j != 1 && k != 1) {
int[] array1x = { p1.x, p2.x, p3.x, p4.x };
int[] array1y = { p1.y, p2.y, p3.y, p4.y };
gra.setColor(Color.GRAY);
gra.fillPolygon(array1x, array1y, 4);

int[] array2x = { pa.x, pb.x, p2.x, p1.x };
int[] array2y = { pa.y, pb.y, p2.y, p1.y };
gra.setColor(Color.darkGray);
gra.fillPolygon(array2x, array2y, 4);

int[] array3x = { p2.x, pb.x, pc.x, p3.x };
int[] array3y = { p2.y, pb.y, pc.y, p3.y };
gra.setColor(Color.BLACK);
gra.fillPolygon(array3x, array3y, 4);
if (width / 3 > 10) {
Digui(p1, width / 3);
}
}
}
}
}
}

猜你喜欢

转载自729713735.iteye.com/blog/2203761