summaryrefslogtreecommitdiffstats
path: root/AutoVisual/IGPFamily.pde
blob: 3451d882825b734e2e999ca5ca0051060e780998 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class IGPFamily {
	PVector mid;
  float diameter;
  float radius;
	ArrayList <PVector> alphaCircleVectors;
	ArrayList <PVector> constructionCircleCenters;
	ArrayList <PVector> constructionPartsTwelve;
	ArrayList <PVector> constructionPartsSixteen;

  IGPFamily(float x, float y, float d){
    ellipseMode(CENTER);
    colorMode(RGB, 1.0, 1.0, 1.0, 1.0);
		mid = new PVector(x, y);
    diameter = d;
    radius = d/2;
		setVectorsOnAlphaCircle();
    println("New IGP object: x="+mid.x+"/ y="+mid.y+"/ diameter="+diameter);
  }
	
	void setVectorsOnAlphaCircle(){
		constructionCircleCenters = new ArrayList <PVector> (6);
		constructionCircleCenters.add(getVectorOnAlphaCircle(0));
		constructionCircleCenters.add(getVectorOnAlphaCircle(30));
		constructionCircleCenters.add(getVectorOnAlphaCircle(60));
		constructionCircleCenters.add(getVectorOnAlphaCircle(90));
		constructionCircleCenters.add(getVectorOnAlphaCircle(120));
		constructionCircleCenters.add(getVectorOnAlphaCircle(150));
		constructionCircleCenters.add(getVectorOnAlphaCircle(180));
		constructionCircleCenters.add(getVectorOnAlphaCircle(210));
		constructionCircleCenters.add(getVectorOnAlphaCircle(240));
		constructionCircleCenters.add(getVectorOnAlphaCircle(270));
		constructionCircleCenters.add(getVectorOnAlphaCircle(300));
		constructionCircleCenters.add(getVectorOnAlphaCircle(330));
	}

  PVector getVectorOnCircle(PVector mid, float degree){
    PVector point = new PVector(mid.x + radius*cos(radians(degree)), mid.y + radius * sin(radians(degree)));
    return point;
  }

  PVector getVectorOnAlphaCircle(float degree){
    return getVectorOnCircle(mid, degree);
  }

	void createSquare(PVector mid, float diameter){
    rect(mid.x, mid.y, diameter, diameter);
	}

	void createOuterSquare() {
    stroke(0.66, 0.66, 0.66, 0.4);
    rectMode(CENTER);
		createSquare(mid, diameter);
  }

	void createInnerSquare() {
    stroke(0.66, 0.66, 0.66, 0.4);
    rectMode(CENTER);
		createSquare(mid, sqrt(sq(diameter)/2));
  }

	void createInnerSquareTilted(float angle){
    rectMode(CENTER);
    stroke(0.66, 0.66, 0.66, 0.4);
		translate(mid.x, mid.y);
		pushMatrix();
		rotate(radians(angle));
		createSquare(new PVector(0, 0), sqrt(sq(diameter)/2));
		popMatrix();
		translate(mid.x*(-1), mid.y*(-1));
	}

  void createCircle(PVector v) {
    ellipse(v.x, v.y, diameter, diameter);
  }

  void createAlphaCircle() {
    stroke(1.0, 0.0, 0.0, 1.0);
		createCircle(mid);
  }

	void createConstructionCircles(){
    stroke(0.66, 0.66, 0.66, 0.4);
    for (PVector constructionCircle : constructionCircleCenters) {
      createCircle(constructionCircle);
    }
	}

	void createLine(PVector from, PVector to){
		beginShape(LINES);
		vertex(from.x, from.y);
		vertex(to.x, to.y);
		endShape();
	}

	void createVerticalHorizontalConstructionLines(){
		createLine(constructionCircleCenters.get(0), constructionCircleCenters.get(2));
		createLine(constructionCircleCenters.get(1), constructionCircleCenters.get(3));	
	}

	void createDiagonalConstructionLines(){
		createLine(new PVector(constructionCircleCenters.get(1).x-radius, constructionCircleCenters.get(2).y-radius), new PVector(constructionCircleCenters.get(3).x+radius, constructionCircleCenters.get(0).y+radius));		
		createLine(new PVector(constructionCircleCenters.get(1).x+radius, constructionCircleCenters.get(0).y-radius), new PVector(constructionCircleCenters.get(3).x-radius, constructionCircleCenters.get(2).y+radius));		
	}

  void display() {
    createAlphaCircle();
  }

  void displayConstructionLines() {
    stroke(0.66, 0.66, 0.66, 0.4);
		createConstructionCircles();
    createVerticalHorizontalConstructionLines();
  }

}