Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.gmail.lueejava;
- import java.util.ArrayList;
- import java.util.Scanner;
- public class DrawSpaceFillingCurve {
- public static void main(String args[]){
- Scanner input = new Scanner(System.in);
- int degree = 0;
- int partX, sizeX = 0;
- int partY, sizeY = 0;
- int orient = 0;
- String pattern = "LFL+F+LFL";
- String changePattern = "";
- ArrayList<StringBuilder> graphicRows = new ArrayList<StringBuilder>();
- System.out.println("Moore Curve - http://en.wikipedia.org/wiki/Moore_curve");
- System.out.print("Enter Degree of the Space Filling Curve: ");
- degree = input.nextInt();
- System.out.println();
- // Builds Path to Follow
- for(int i = 1; i < degree; i++){
- for(int j = 0; j < pattern.length(); j++){
- if(pattern.charAt(j) == 'L')
- changePattern += "-RF+LFL+FR-";
- if(pattern.charAt(j) == 'R')
- changePattern += "+LF-RFR-FL+";
- if(pattern.charAt(j) == 'F' || pattern.charAt(j) == '+' || pattern.charAt(j) == '-')
- changePattern += pattern.charAt(j);
- }
- pattern = changePattern;
- changePattern = "";
- }
- // Finds Full Size X/Y
- sizeY = (int) (2 * Math.pow(2.0, degree) - 1.0);
- sizeY -= 1; // Start at 0
- sizeX = sizeY;
- // Setting Start Point
- partX = (int) (Math.pow(2.0, degree) - 1.0);
- partX -= 1; // Start at 0
- partY = sizeY;
- input.close();
- //Forcing Graphic List To Be Full Size
- for(int i = 0; i <= sizeY; i++){
- graphicRows.add(i, new StringBuilder(""));
- graphicRows.get(i).setLength(sizeX+1);
- }
- //Start ASCII Drawing.
- graphicRows.get(partY).setCharAt(partX, '#');
- for(int i = 0; i < pattern.length(); i++){
- if (pattern.charAt(i) == '+' || pattern.charAt(i) == '-'){
- orient = changeOrientation(pattern.charAt(i), orient);
- } else if (pattern.charAt(i) == 'F'){
- for (int j = 0; j < 2; j++){
- if (orient == 0){
- partY--;
- }else if (orient == 1){
- partX++;
- }else if (orient == 2){
- partY++;
- }else if (orient == 3){
- partX--;
- }
- graphicRows.get(partY).setCharAt(partX, '#'); // Places #
- }
- }
- }
- // Reads Strings and Prints
- for(int i = 0; i < graphicRows.size(); i++){
- for(int j = 0; j < graphicRows.get(i).toString().length(); j++){
- if(graphicRows.get(i).toString().charAt(j) == '#'){
- System.out.print("#");
- }else{
- System.out.print(" ");
- }
- }
- System.out.println();
- }
- System.out.println();
- System.out.println("Written by: Colton Fairley");
- }
- private static int changeOrientation(char charAt, int orient) {
- if (charAt == '+'){
- if (orient == 3){
- orient = 0;
- } else {
- orient++;
- }
- } else if (charAt == '-'){
- if (orient == 0){
- orient = 3;
- } else {
- orient--;
- }
- }
- return orient;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement