Added Greek Cross Fractal and Octahedron Fractal

added two new fractals to the generator.
master
matortheeternal 2014-05-17 00:45:32 -07:00
parent 7493466831
commit 07466b5108
9 changed files with 142 additions and 5 deletions

4
VoxelEngine/bin/html.txt Normal file
View File

@ -0,0 +1,4 @@
<html>
<applet code="voxelengine.Menu.class" width="800" height="640">
</applet>
</html>

View File

@ -129,6 +129,8 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
choice.addItem("Menger Sponge");
choice.addItem("Mandelbulb");
choice.addItem("Mandelbox");
choice.addItem("Greek Cross");
choice.addItem("Octahedron");
choice.setMaximumSize(new Dimension(140, 40));
choice.setForeground(Color.LIGHT_GRAY);
choice.setBackground(Color.BLACK);
@ -241,6 +243,7 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
color.addItem("white");
color.addItem("gray");
color.addItem("darkGray");
size.setText("81");
power.setEnabled(false);
zoom.setEnabled(false);
minIt.setEnabled(false);
@ -248,6 +251,56 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
cutoff.setEnabled(false);
}
public void crossMenu() {
colorL.setText("Color: ");
color.removeAll();
color.addItem("red");
color.addItem("green");
color.addItem("blue");
color.addItem("yellow");
color.addItem("orange");
color.addItem("magenta");
color.addItem("pink");
color.addItem("cyan");
color.addItem("black");
color.addItem("white");
color.addItem("gray");
color.addItem("darkGray");
powerL.setText("Scale: ");
power.setText("3");
size.setText("63");
power.setEnabled(true);
zoom.setEnabled(false);
minIt.setEnabled(false);
maxIt.setEnabled(false);
cutoff.setEnabled(false);
}
public void octahedronMenu() {
colorL.setText("Color: ");
color.removeAll();
color.addItem("red");
color.addItem("green");
color.addItem("blue");
color.addItem("yellow");
color.addItem("orange");
color.addItem("magenta");
color.addItem("pink");
color.addItem("cyan");
color.addItem("black");
color.addItem("white");
color.addItem("gray");
color.addItem("darkGray");
powerL.setText("Scale: ");
power.setText("7");
size.setText("63");
power.setEnabled(true);
zoom.setEnabled(false);
minIt.setEnabled(false);
maxIt.setEnabled(false);
cutoff.setEnabled(false);
}
public void bulbMenu() {
colorL.setText("Palette: ");
color.removeAll();
@ -258,6 +311,7 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
color.addItem("goldfish");
color.addItem("dreamy");
powerL.setText("Power: ");
size.setText("81");
power.setEnabled(true);
zoom.setEnabled(false);
minIt.setEnabled(true);
@ -276,6 +330,7 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
color.addItem("goldfish");
color.addItem("dreamy");
powerL.setText("Scale: ");
size.setText("81");
power.setEnabled(true);
zoom.setEnabled(true);
minIt.setEnabled(true);
@ -332,8 +387,12 @@ public class Menu extends Applet implements ActionListener, ItemListener, Runnab
mengerMenu();
} else if (sel.equals("Mandelbulb")) {
bulbMenu();
} else if (sel.equals("Mandelbox")){
} else if (sel.equals("Mandelbox")) {
boxMenu();
} else if (sel.equals("Greek Cross")) {
crossMenu();
} else if (sel.equals("Octahedron")) {
octahedronMenu();
}
}
}

View File

@ -1,6 +1,5 @@
package voxelengine;
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
@ -85,6 +84,12 @@ public class SwingInterface extends JPanel {
} else if (arguments[1].equals("Mandelbox")) {
System.out.println("Generating Mandelbox...");
world.generateMandelbox(arguments[2], Integer.parseInt(arguments[3]), Double.parseDouble(arguments[6]), Double.parseDouble(arguments[8]), Integer.parseInt(arguments[4]), Integer.parseInt(arguments[5]), Double.parseDouble(arguments[7]), offset, offset, offset);
} else if (arguments[1].equals("Greek Cross")) {
System.out.println("Generating Greek Cross Fractal...");
world.generateCross(arguments[2], Integer.parseInt(arguments[3]), offset, offset, offset, Integer.parseInt(arguments[6]), 0);
} else if (arguments[1].equals("Octahedron")) {
System.out.println("Generating Octahedron Fractal...");
world.generateOctahedron(arguments[2], Integer.parseInt(arguments[3]), offset, offset, offset, Integer.parseInt(arguments[6]));
}
System.out.println((Math.round((System.currentTimeMillis() - time)/10)/100.0)+" seconds spent generating world.");
time = System.currentTimeMillis();
@ -129,10 +134,10 @@ public class SwingInterface extends JPanel {
camera.rotY += Math.PI / 32;
}
if (keyboard.isKeyDown('I')) {
camera.rotX -= Math.PI / 32;
camera.rotX += Math.PI / 32;
}
if (keyboard.isKeyDown('K')) {
camera.rotX += Math.PI / 32;
camera.rotX -= Math.PI / 32;
}
if (keyboard.isKeyDown('T')) {
pixelScale++;

View File

@ -313,6 +313,75 @@ public class World {
return output;
}
// greek cross fractal
public void generateCross(String id, int d0, int xOffset, int yOffset, int zOffset, int scale, int mode) {
int d1 = (d0 - 1)/2;
if ((Math.floor(d1) - d1 != 0) || (d1 < scale))
return;
// make cross
if (mode != 1) {
for (int x = 0; x < d0; x++) {
if (x == d1)
continue;
setBlock(id, x + xOffset, d1 + yOffset, d1 + zOffset);
}
}
if (mode != 2) {
for (int y = 0; y < d0; y++) {
if (y == d1)
continue;
setBlock(id, d1 + xOffset, y + yOffset, d1 + zOffset);
}
}
if (mode != 3) {
for (int z = 0; z < d0; z++) {
if (z == d1)
continue;
setBlock(id, d1 + xOffset, d1 + yOffset, z + zOffset);
}
}
d1++;
// recursion close
generateCross(id, d1 - 1, 0 + xOffset, d1/2 + yOffset, d1/2 + zOffset, scale, 1);
generateCross(id, d1 - 1, d1/2 + xOffset, 0 + yOffset, d1/2 + zOffset, scale, 2);
generateCross(id, d1 - 1, d1/2 + xOffset, d1/2 + yOffset, 0 + zOffset, scale, 3);
// recursion far
generateCross(id, d1 - 1, d1 + xOffset, d1/2 + yOffset, d1/2 + zOffset, scale, 1);
generateCross(id, d1 - 1, d1/2 + xOffset, d1 + yOffset, d1/2 + zOffset, scale, 2);
generateCross(id, d1 - 1, d1/2 + xOffset, d1/2 + yOffset, d1 + zOffset, scale, 3);
}
// octahedron fractal
public void generateOctahedron(String id, int d0, int xOffset, int yOffset, int zOffset, int oscale) {
int d1 = (d0 - 1)/2;
int d2 = (d1 - 1)/2;
// create octahedron when minimum scale reached
if (d1 < oscale) {
int width = 0;
for (int y = 0; y < d0; y++) {
for (int z = 0; z < d0; z++) {
for (int x = 0; x < d0; x++) {
if (Math.abs(z - d1) + Math.abs(x - d1) <= width) {
setBlock(id, x + xOffset, y + yOffset, z + zOffset);
}
}
}
if (y > d1 - 1)
width--;
else
width++;
}
}
else { // recursion
generateOctahedron(id, d1, d2 + 1 + xOffset, d1 + 1 + yOffset, d2 + 1 + zOffset, oscale); // top octahedron
generateOctahedron(id, d1, d2 + 1 + xOffset, yOffset, d2 + 1 + zOffset, oscale); // bottom octahedron
generateOctahedron(id, d1, xOffset, d2 + 1 + yOffset, d2 + 1 + zOffset, oscale); // close right octahedron
generateOctahedron(id, d1, d2 + 1 + xOffset, d2 + 1 + yOffset, zOffset, oscale); // close left octahedron
generateOctahedron(id, d1, d2 + 1 + xOffset, d2 + 1 + yOffset, d1 + 1 + zOffset, oscale); // far right octahedron
generateOctahedron(id, d1, d1 + 1 + xOffset, d2 + 1 + yOffset, d2 + 1 + zOffset, oscale); // far left octahedron
}
}
// palettes and block types
public void addColorBlockTypes() {

View File

@ -291,7 +291,7 @@ function main() {
return;
}
context.print("Generating a level "+d+" Dodecahedron Fractal... \n");
d = 20 * Math.pow(2 + gr, d - 1);
d = 30 * Math.pow(2 + gr, d - 1);
context.print("Scale = "+d+"x"+d+"x"+d);
dodecahedron(d, 0, 0, 0);
}