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();
}
}
|