summaryrefslogtreecommitdiffstats
path: root/AutoVisual/IGPFamily.pde
blob: 4306a025002b9ff3bcc97f55aecadd18c6ed9c56 (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
116
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;
    println("New IGP object: x="+mid.x+"/ y="+mid.y+"/ diameter="+diameter);
  }

  void setVectorsOnAlphaCircle(){
    alphaCircleVectors = new ArrayList <PVector> (12);
    alphaCircleVectors.add(getVectorOnAlphaCircle(0));
    alphaCircleVectors.add(getVectorOnAlphaCircle(30));
    alphaCircleVectors.add(getVectorOnAlphaCircle(60));
    alphaCircleVectors.add(getVectorOnAlphaCircle(90));
    alphaCircleVectors.add(getVectorOnAlphaCircle(120));
    alphaCircleVectors.add(getVectorOnAlphaCircle(150));
    alphaCircleVectors.add(getVectorOnAlphaCircle(180));
    alphaCircleVectors.add(getVectorOnAlphaCircle(210));
    alphaCircleVectors.add(getVectorOnAlphaCircle(240));
    alphaCircleVectors.add(getVectorOnAlphaCircle(270));
    alphaCircleVectors.add(getVectorOnAlphaCircle(300));
    alphaCircleVectors.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.0, 0.0, 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(){
    //TODO: add for 16 parts
    createLine(alphaCircleVectors.get(0), alphaCircleVectors.get(6));
    createLine(alphaCircleVectors.get(3), alphaCircleVectors.get(9));
  }

  void createDiagonalConstructionLines(){
    //TODO: add for 16 parts
    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();
  }

}