> Week 2. 'Mondriaan Generator'
Crescent
01. Info

-
몬드리안의 '빨강, 파랑, 노랑의 구성'에서 따왔다.
-
Alphabet:
H
,V
,R
,C
,[
,]
- Square:
H
(horizontal),V
(Vertical) - Line:
R
(row),C
(column) - small square:
[]
, 작은 사각형의 모임
- Square:
-
Start:
V
-
Stochastic L-system Rule(Probability)
- (
H
→[VCV]
): 50% or (H
→V
): 50% - (
V
→[HRH]
): 50% or (V
→H
): 50%
- (
![설명하는 사진. '[HR[VCV]]'가 위의 네모는 세로줄, 아래 네모는 가로줄로 나뉘어져 있다.](image/220929-processing-week-2/Processing-2-HRH.png)
[HRH]
[[VCV]R[VCV]]
[[VC[HRH]]R[[HRH]CV]]
[[VC[[VCV]R[VCV]]]R[[[VCV]RH]CV]]
box("[[VCV]R[VCV]]")
: parsing string parameterbox("[VCV]")
box("VCV")
rect(V)
line(C)
rect(V)
line(R)
box("[VCV]")
box("VCV")
rect(V)
line(C)
rect(V)
- Using
java.util.ArrayDeque
andjava.util.Deque
to make a stack Deque
를 스택으로 써서 괄호 문자열을 파싱하는 방향으로 나아갔다.[[VCV]RV]
일 때R
이 등장하는지 혹은C
가 등장하는지에 따라서 현재 상태를 파악했다.- 선 앞인지 뒤인지에 따라서 그리는 사각형의 크기가 달라지므로 그것도 파악했다.
// Add Stochastic L-system Rule
class Rule {
char a;
String b;
String c;
Rule(char a_, String b_, String c_) {
a = a_;
b = b_;
c = c_;
}
char getA() {
return a;
}
String getB() {
float p = random(0, 1);
if(p<0.5) return b;
return c;
}
}
- 일부
L-system
의 코드는Nature of Code
에서 따왔다.LSystem.pde
와Rule.pde
는 거의 다 가져왔고, 그리는 부분은class
없이 새로 짰다.
noc-examples-processing/chp08_fractals/NOC_8_09_LSystem/
getB()
:Stochastic L-system Rule
을 구현하기 위해서random
을 썼다.- 대략 확률은
50%
로 구성
- 대략 확률은
// Make Rules
Rule[] ruleset = new Rule[2];
ruleset[0] = new Rule('H', "[VCV]", "V");
ruleset[1] = new Rule('V', "[HRH]", "H");