프랙탈 트리 만들기

빈 오브젝트 하나 만들어서 스크립트를 추가합시다

 

허헛;?! 이건 뭐지?!

오우...

???

잉엥????? 화면을 움직이다보면 구멍에 빠져드는 느낌이네요.. 자꾸 이상한게 만들어지네요 ㅎㅎ;

?!?!

 

오우 예스 됐습니다. 

오예스 원하던 각도

 

이 상태로 반대쪽 각도로도 추가해보니 얼핏 나무가 나왔네요

 

재귀 호출 개수를 높여봅시다.

오예 그럴싸하게 나왔는데..? 근데 길이와 각도가 고정되니 완젼 데칼같네요.

 

 

 

좀 더 나무처럼 만들어보기 위해 길이랑 각도를 랜덤으로 만들어서 보니 꽤나 좋아졌네요.

 

 

 

체크박스를 누르면 다른 모양을 볼 수 있습니다.

왼쪽은 랜덤, 오른쪽은 고정

 

 

아래는 FractalTree 스크립트입니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FractalTree : MonoBehaviour
{
    public bool bDraw = true;

    public void DrawFixedView(Vector3 curPos, int order, float length, float angle)
    {
        Vector3 dvec = Vector3.zero;
        dvec.x = length * Mathf.Sin(angle);
        dvec.y = length * Mathf.Cos(angle);
        Debug.DrawLine(curPos, curPos + dvec);
        if (order > 0)
        {
            DrawFixedView(curPos + dvec, order - 1, length * 0.8f, angle - 0.5f);
            DrawFixedView(curPos + dvec, order - 1, length * 0.8f, angle + 0.5f);
        } 
    }

    public void DrawRandomTreeView(Vector3 curPos, int order, float length, float angle)
    {
        Vector3 dvec = Vector3.zero;
        dvec.x = length * Mathf.Sin(angle);
        dvec.y = length * Mathf.Cos(angle);
        Debug.DrawLine(curPos, curPos + dvec);

        if(order > 0)
        {
            DrawFixedView(curPos + dvec, order - 1, length * Random.Range(0.5f, 0.8f), angle - Random.Range(0.0f, 1.0f));
            DrawFixedView(curPos + dvec, order - 1, length * Random.Range(0.5f, 0.8f), angle + Random.Range(0.0f, 1.0f));
        }
    }

    private void OnDrawGizmos()
    {
        if (bDraw)
        {
            // 고정된 값
            DrawFixedView(new Vector3(-500, 0, 0), 8, 202, 0);

            // 랜덤 값
            DrawRandomTreeView(new Vector3(500, 0, 0), 8, 202, 0);
            bDraw = false;
        }
    }
}

 

입력

 

최단거리 찾기 완료

 

source code :

https://github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/BFS/bfsSimulation.cpp

+ Recent posts