본문 바로가기
Computation Geography

0. Computation Geography..

by SimonLee 2023. 8. 31.

공부를 하고 실무에서 사용했던 내용들을 정리를 하지 않으니깐, 자꾸 까먹습니다.

 

이번 기회에 잘 정리를 하고 추후에 유투브에 강의형식으로 올려볼 생각입니다.

 

모델링에 필요한 수학적인 요소들을 정리하고 그래픽스 모델링에 필요한 기하학 내용들을 정리하고

 

실제로 구현해볼 생각입니다.

 

내용은 이론내용 + C# 코드로 구성이 되어있습니다.

 

수학적인 내용들을 구현을 하다 보니 base class와 api가 필요합니다.

 

아래 base code를 참고 하시면 됩니다.

 

public static class Extension
{
    private static readonly float TOLERANCE = 0.000001f;
    public static bool IsEqual(this float x, float y)
    {
        Debug.Log("IsEqual");
        return Math.Abs(x - y) < TOLERANCE;
    }		
}
static class Constants
{
    public const float FLT_MIN = -1;
}

class Vector3f
{
    private float[] values;

    public Vector3f(float x, float y, float z)
    {
        this.values = new float[3];
        this.values[0] = x;
        this.values[1] = y;
        this.values[2] = z;
    }

    public float x
    {
        get => values[0];
        set => values[0] = value;
    }
    public float y
    {
        get => values[1];
        set => values[1] = value;
    }
    public float z
    {
        get => values[2];
        set => values[2] = value;
    }


    public float this[int key]
    {
        get => values[key];
        set => values[key] = value;
    }


    public static bool operator ==(Vector3f a, Vector3f b)
    {
        if (a.values.Length != b.values.Length) return false;            
        for (int i=0; i < a.values.Length; i++)
        {
            if (!a.values[i].IsEqual(b.values[i]))
            {
                return false;
            }
        }
        return true;
    }

    public static bool operator !=(Vector3f a, Vector3f b)
    {
        return !(a == b);
    }

    public static Vector3f operator +(Vector3f a, Vector3f b)
    {
        var c = new Vector3f(0, 0, 0);
        c.x = a.x + b.x;
        c.y = a.y + b.y;
        c.z = a.z + b.z;
        return c;
    }

    public static Vector3f operator -(Vector3f a, Vector3f b)
    {
        var c = new Vector3f(0, 0, 0);
        c.x = a.x - b.x;
        c.y = a.y - b.y;
        c.z = a.z - b.z;
        return c;
    }

    public static bool operator <(Vector3f a, Vector3f b)
    {
        for (int i = 0; i < a.values.Length; i++)
        {
            if (a.values[i] < b.values[i]) return true;
            else if (a.values[i] > b.values[i]) return false;
        }
        return false;
    }

    public static bool operator > (Vector3f a, Vector3f b)
    {
        if (a == b) return false;
        return !(a < b);
    }
}

 

 

Reference List (참고한 강의 입니다.)

- https://www.udemy.com/course/mastering-computational-geometry-cpp/

- http://www.kocw.net/home/cview.do?cid=b174e6a5ad9747a7 

 

컴퓨터그래픽스

3차원 컴퓨터 그래픽스의 기초 및 중요 요소를 OpenGL 및 OpenGL ES를 이용해 강의함.

www.kocw.net