class IGPTheGreatMosqueOfCordoba extends IGPSquare{ PVector[][] cornerPieces; PVector[][] sidePieces; PVector[][] starPieces; PVector[][] verticalVs; PVector[][] horizontalVs; ArrayList middleStar; IGPTheGreatMosqueOfCordoba(float x, float y, float d){ super(x, y, d, 4); setVectorsOnOuterSquare(); setInterlacingVs(); setSidePieces(); setCornerPieces(); setStarPieces(); setMiddleStar(); } void setVectorsOnOuterSquare(){ vectorsOnOuterSquare = new ArrayList (16); vectorsOnOuterSquare.add(alphaCircleVectorsSixteen.get(0)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), mid.x+radius, false)); vectorsOnOuterSquare.add(new PVector(mid.x+radius, mid.y+radius)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), mid.y+radius, true)); vectorsOnOuterSquare.add(alphaCircleVectorsSixteen.get(4)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6), mid.y+radius, true)); vectorsOnOuterSquare.add(new PVector(mid.x-radius, mid.y+radius)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(6), mid.x-radius, false)); vectorsOnOuterSquare.add(alphaCircleVectorsSixteen.get(8)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(10), mid.x-radius, false)); vectorsOnOuterSquare.add(new PVector(mid.x-radius, mid.y-radius)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(10), mid.y-radius, true)); vectorsOnOuterSquare.add(alphaCircleVectorsSixteen.get(12)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(14), mid.y-radius, true)); vectorsOnOuterSquare.add(new PVector(mid.x+radius, mid.y-radius)); vectorsOnOuterSquare.add(getVectorOnExtendedLine(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), mid.x+radius, false)); } void setInterlacingVs(){ PVector[] vectors = new PVector[2]; verticalVs = new PVector[4][2]; horizontalVs = new PVector[4][2]; vectors[0] = vectorsOnOuterSquare.get(13); vectors[1] = vectorsOnOuterSquare.get(4); verticalVs[0] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(11); vectors[1] = vectorsOnOuterSquare.get(4); verticalVs[1] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(3); vectors[1] = vectorsOnOuterSquare.get(12); verticalVs[2] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(5); vectors[1] = vectorsOnOuterSquare.get(12); verticalVs[3] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(15); vectors[1] = vectorsOnOuterSquare.get(8); horizontalVs[0] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(1); vectors[1] = vectorsOnOuterSquare.get(8); horizontalVs[1] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(9); vectors[1] = vectorsOnOuterSquare.get(0); horizontalVs[2] = vectors; vectors = new PVector[2]; vectors[0] = vectorsOnOuterSquare.get(7); vectors[1] = vectorsOnOuterSquare.get(0); horizontalVs[3] = vectors; } void setMiddleStar(){ middleStar = new ArrayList (16); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2))); middleStar.add(getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4))); } void setCornerPieces(){ cornerPieces = new PVector[4][4]; PVector[] cornerPiece = new PVector[4]; cornerPiece[0] = vectorsOnOuterSquare.get(1); cornerPiece[1] = vectorsOnOuterSquare.get(2); cornerPiece[2] = vectorsOnOuterSquare.get(3); cornerPiece[3] = alphaCircleVectorsSixteen.get(2); cornerPieces[0] = cornerPiece; cornerPiece = new PVector[4]; cornerPiece[0] = vectorsOnOuterSquare.get(5); cornerPiece[1] = vectorsOnOuterSquare.get(6); cornerPiece[2] = vectorsOnOuterSquare.get(7); cornerPiece[3] = alphaCircleVectorsSixteen.get(6); cornerPieces[1] = cornerPiece; cornerPiece = new PVector[4]; cornerPiece[0] = alphaCircleVectorsSixteen.get(10); cornerPiece[1] = vectorsOnOuterSquare.get(9); cornerPiece[2] = vectorsOnOuterSquare.get(10); cornerPiece[3] = vectorsOnOuterSquare.get(11); cornerPieces[2] = cornerPiece; cornerPiece = new PVector[4]; cornerPiece[0] = vectorsOnOuterSquare.get(14); cornerPiece[1] = vectorsOnOuterSquare.get(15); cornerPiece[2] = alphaCircleVectorsSixteen.get(14); cornerPiece[3] = vectorsOnOuterSquare.get(13); cornerPieces[3] = cornerPiece; } void setSidePieces(){ sidePieces = new PVector[8][4]; PVector[] sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(0); sidePiece[1] = vectorsOnOuterSquare.get(1); sidePiece[2] = alphaCircleVectorsSixteen.get(2); sidePiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0)); sidePieces[0] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(3); sidePiece[1] = vectorsOnOuterSquare.get(4); sidePiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0)); sidePiece[3] = alphaCircleVectorsSixteen.get(2); sidePieces[1] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(4); sidePiece[1] = vectorsOnOuterSquare.get(5); sidePiece[2] = alphaCircleVectorsSixteen.get(6); sidePiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); sidePieces[2] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); sidePiece[1] = alphaCircleVectorsSixteen.get(6); sidePiece[2] = vectorsOnOuterSquare.get(7); sidePiece[3] = vectorsOnOuterSquare.get(8); sidePieces[3] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4)); sidePiece[1] = vectorsOnOuterSquare.get(8); sidePiece[2] = vectorsOnOuterSquare.get(9); sidePiece[3] = alphaCircleVectorsSixteen.get(10); sidePieces[4] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(12); sidePiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); sidePiece[2] = alphaCircleVectorsSixteen.get(10); sidePiece[3] = vectorsOnOuterSquare.get(11); sidePieces[5] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(13); sidePiece[1] = alphaCircleVectorsSixteen.get(14); sidePiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2)); sidePiece[3] = vectorsOnOuterSquare.get(12); sidePieces[6] = sidePiece; sidePiece = new PVector[4]; sidePiece[0] = vectorsOnOuterSquare.get(15); sidePiece[1] = vectorsOnOuterSquare.get(0); sidePiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); sidePiece[3] = alphaCircleVectorsSixteen.get(14); sidePieces[7] = sidePiece; } void setStarPieces(){ starPieces = new PVector[8][4]; PVector[] starPiece = new PVector[4]; starPiece[0] = alphaCircleVectorsSixteen.get(14); starPiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2)); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14)); starPieces[0] = starPiece; starPiece = new PVector[4]; starPiece[0] = alphaCircleVectorsSixteen.get(0); starPiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPieces[1] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); starPiece[1] = alphaCircleVectorsSixteen.get(2); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPieces[2] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(4)); starPiece[1] = alphaCircleVectorsSixteen.get(4); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); starPieces[3] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(6), alphaCircleVectorsSixteen.get(0)); starPiece[1] = alphaCircleVectorsSixteen.get(6); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2)); starPieces[4] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(2), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[2] = alphaCircleVectorsSixteen.get(8); starPiece[3] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4)); starPieces[5] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(4)); starPiece[3] = alphaCircleVectorsSixteen.get(10); starPieces[6] = starPiece; starPiece = new PVector[4]; starPiece[0] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(2)); starPiece[1] = getLineIntersection(alphaCircleVectorsSixteen.get(8), alphaCircleVectorsSixteen.get(14), alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0)); starPiece[2] = getLineIntersection(alphaCircleVectorsSixteen.get(10), alphaCircleVectorsSixteen.get(0), alphaCircleVectorsSixteen.get(12), alphaCircleVectorsSixteen.get(6)); starPiece[3] = alphaCircleVectorsSixteen.get(12); starPieces[7] = starPiece; } void createMiddleStar(){ useStrokeColor(); useFillColor(); beginShape(); for (PVector middleStarVector: middleStar) { vertex(middleStarVector.x, middleStarVector.y); } endShape(); } void createCornerPieces(){ useStrokeColor(); useFillColor(); for(int i=0; i0){ beginShape(); for(int j=0; j0){ beginShape(); for(int j=0; j0){ beginShape(); for(int j=0; j