이것은 타사 라이브러리를 검색하고 통합하기 위해 직접 구현하는 것이 더 빠른 문제 일 수 있습니다.
L 시스템을 구현하는 것은 매우 쉽습니다. 2 부분을 구현해야합니다.
첫 번째 부분은 문자열 다시 쓰기 시스템입니다. 간단하다. 다시 쓰기 규칙 (char key, string value) 사전을 가지고 초기 문자열 i-times (i는 반복 횟수)에 해당 규칙을 적용하면됩니다.
의사 코드 :
map<char, string> rewriteRules = {{'L', "L+R+"}, {'R',"-L+R"}};
string rewrite(string str) {
string result = "";
for each (char c in str) {
if (rewriteRules contains key c) {
result += rewriteRules[c];
}
else {
result += c; // identity
}
}
}
번째 단단한 부분은 심볼의 결과 문자열의 해석이다. 거북과 같은 그래픽을 3D로 해석하는 가장 쉬운 방법은 쿼터니언을 사용하는 것입니다.이를 결합하는 것은 간단합니다. 상기 용 곡선과 기호의 의미 론적 의미를 묘사
다시 쓰기 규칙은 다음
- L, R : 전방 선 그리기
- + : 턴 왼쪽 90도
- : - 우회전으로 90도
다음 코드 스 니펫은 쿼터니언을 사용하여 3D로 이동 및 회전 구현을 시연합니다. C#으로 작성된 내 L 시스템 통역사에서 온 것입니다. (당신이 나를 용서해 주길 바래요 :).
Quaternion rotationQuat = Quaternion.Indentity;
Vector3D position;
Vector3D forwardVector = new Vector3D(1, 0, 0);
Vector3D upVector = new Vector3D(0, 1, 0);
Vector3D rightVector = forwardVector.Cross(upVector);
public void Forward(double distance, bool draw) {
Vector3D moveVector = rotationQuat.Transform(forwardVector * distance);
Vector3D oldPosition = position;
position += moveVector;
if (draw) {
// draw cylinder/box from oldPosition to (new) position
}
}
public void Yaw(double angle) {
rotationQuat *= new Quaternion(upVector, angle);
}
public void Pitch(double angle) {
rotationQuat *= new Quaternion(rightVector, angle);
}
public void Roll(double angle) {
rotationQuat *= new Quaternion(forwardVector, angle);
}
문자열을 해석하려면 문자열을 통과하고 각 기호를 해석해야합니다. 가장 간단한 방법은 바로 전환된다
for each (char c in string) {
switch(c) {
case 'L':
case 'R':
Forward(10, true);
break;
case '+':
Yaw(90);
break;
case '-':
Yaw(-90);
break;
default:
break; // do nothing
}
}
는 L-시스템 (심지어 3D에서) 좋은 웹 사이트 당신이 그렇게 할 수 http://malsys.cz이 실험 할 경우 (그 C#을 조각 그것에서입니다 :)
L 시스템의 사용을 환영합니다!