분류 전체보기

    C# static (정적) 메서드와 클래스

    1. C# static 메서드 정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고 직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다. 이 메서드는 메서드 앞에 static 이라는 C# 키워드를 적어 주며, 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안된다. 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다. 2. C# static 속성, 필드 정적(Static) 속성 및 필드는 위의 static 메서드와 같이 [클래스명.속성명]과 같이 사용하며, 다음 예와 같이 static을 앞에 붙여 정의한다. 클래스 내의 Non-static 필드들은 클래스 인스턴트를 생성할 때마다 메모리에 매번 새로 생성되게 되는 ..

    [DX11 물방울책] 챕터3 - 트랜스폼 (위치값,회전값,크기값)

    1. 크기값 (Scale) 행렬 표현식은 아래와 같다. 예시2 2. 회전값 (Rotation) 예시 -30도만큼 회전 3. 동차 좌표 (homogeneous coordinate) Homogeneous 좌표는 쉽게 말하면 (x, y)를 (x, y, 1)로 표현하는 것. 임의의 0이 아닌 상수 w에 대해 (x, y)를 (wx, wy, w) 즉, homogeneous 좌표계에서 스케일(scale)은 무시되며 (x, y)에 대한 homogeneous 좌표 표현은 무한히 많이 존재하게 된다. 마찬가지로, 3차원의 경우에는 (X, Y, Z)를 (X, Y, Z, 1) 나 (wX, wY, wZ, w)로 표현. Homogeneous 좌표가 활용되는 곳은 주로 컴퓨터 그래픽스(graphics) 쪽이나 3D 비전 쪽이다. ..

    [DX11 물방울책] 챕터 2 - 행렬

    1. 행렬의 정의 그래픽스에선 행렬은 주로 트랜스폼 (이동,회전,크기) 그리고 벡터 위치를 프레임간 옮기고자 할 때 쓰여진다. m * n 행렬은 네모 모양의 m열 n행의 2차원 배열이다. 각 숫자를 원소라고 불린다. 각 행을 벡터로 취급할 때도 있다 2. 행렬간 곱셈 A 행렬의 행 개수와 B 행렬의 열 개수가 일치해야 연산이 가능하다. 3. 벡터와 행렬간 곱셈 4. 선형 결합 벡터 행렬 곱셈간 결과 uA는 선형 결합과 똑같다고 한다. 5. 결합 법칙 A(B + C) = AB + AC 그리고 (A + B)C = AC + BC 6. 전치 행렬 행렬의 행과 열을 교환해서 구한다. 전치 행렬의 속성은 다음과 같다. 7. 단위 행렬 좌>우측으로 대각선으로 가는 원소들 제외하고 모든 원소가 0인 행렬을 칭한다. 8..

    C++ virtual 다중 상속, 가상 부모 클래스

    다중 상속을 할 시 예상치 못하게 클래스가 중복될 가능성이 있다. class A { public: int a; }; class B : public A { public: int b; }; class C : public A { public: int c; }; class D : public B, public C { public: int d; }; A 클래스를 B, C 클래스가 상속받고 B, C 클래스를 D클래스가 상속받는 구조다. 문제는 이와같은 구조로 상속받을 때 A클래스의 내용물이 중복이 된다 하지만 중복되는 걸 희망하지 않을 때는 virtual 상속을 사용하면 된다. 클래스를 상속받을 때 상속받는 클래스에 virtual 을 앞에 붙여주면 된다 그렇게 되면, B, C 클래스를 상속받는 경우 B, C 클래스..

    [DX11 물방울책] 챕터 1 - 벡터

    벡터는 게임 그래픽스에서 아주 중요한 역할을 하고있다. 예) 충돌 처리 그리고 물리 작용. 1. 벡터란 무엇인가? 크기와 방향을 지닌 값이다. 예시는 아래와 같다. 강체 : 힘 위치 속도 : 가속도와 방향 2. 벡터와 좌표계 벡터를 좌표계로 표현할려면 현재 공간상 위치값을 치환하면 된다. 예) 3D (x, y, z), 2D (x,y) 두 프레임 즉 시점에 따라 같은 방향이어도 위치가 다를 수가 있다. 3. 왼손 좌표계 vs 오른손 좌표계 Direct3D는 왼손 좌표계를 사용한다. 4. 기본 벡터 연산 두 벡터는 모든 좌표가 일치해야 똑같다라고 할 수가 있다. 두 벡터간 덧셈은 오직 같은 좌표로만 진행한다. 스칼라곱 같은 경우엔 자연수를 각 좌표를 곱해야한다 (형태 유지). 두 벡터간 뺄셈은 (왼쪽 벡터 ..

    OOP

    OOP란?? (Object Oriented Programming) C++는 객체지향 언어이고 해당 언어를 OOP라고 부르며 Object Oriented Programming의 약자다. 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. Class (클래스) / Object (객체) Abstraction (추상화) Encapsulation (캡슐화) Inheritance (상속성) Polymorphism (다형성) 장점 코드 재사용이 용이 (남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.) 유지보수가 쉬움 (절차 지향 프로그래밍에서..

    응집도 - 결합도 (Cohesion - Coupling) 개념

    응집도는 모듈 내부에 존재하는 구성 요소들 사이의 밀접한 정도를 나타낸다. 즉 하나의 모듈 안에서 구성 요소들 간에 똘똘 뭉쳐 있는 정도. 응집도가 높을수록 구성 요소들이 꼭 필요한 것들로만 모여 있고, 낮을수록 서로 관련성이 적은 요소들이 모여 있다. 응집도 종류이러한 응집도는 아래와 같이 다양한 기준으로 모듈을 구성할 수 있고 그에 따라 응집도와 품질이 달라진다.기능적 응집도 : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우.순차적 응집도 : 모듈 내의 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우.교환적 응집도 : 동일한 입력과 출력을 사용하여 서로 다른 긴으을 수행하는 구성 요소들이 모여 있을 경우.절차적 응집도 : 모듈이 다수의 관련 기능을..

    [실1] 11403 - 경로 찾기

    플로이드 와샬 #include #define INF 100000 #define NODE 1000 using namespace std; int graph[NODE][NODE]{ 0 }; void Floyd_washall() { int n; cin >> n; for (int i = 0; i > graph[i][j]; } for (int k = 0; k < n; k++) // 거쳐가는 노드 { for (int i = 0; i < n; i++) // 출발지 노드 { for (int j = 0; j < n; j++) // 도착지 노드 { if (graph[i][k] && graph[k][j]) graph[i][j]= 1; } } } ..

    컴파일 속도 향상 (시간 초과 오류)와 Stream (스트림)

    ios::sync_with_stdio, cin.tie, cout.tie란? ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); Stream 우선 stream에 대한 이해가 먼저 필요하다 우리가 c언어와 c++언어를 가장 처음 배울 때 적는 것은 사실 아래에 두 헤더파일이다 각각은 stdio: standard input output iostream: input output stream #include #include 표준 스트림(standard streams)은 특정한 프로그래밍 언어 인터페이스뿐 아니라 유닉스 및 유닉스 계열 운영 체제(어느 정도까지는 윈도에도 해당함)에서 컴퓨터 프로그램과 그 환경(일반적으로 단말기) 사이에 미리 연결된 입출력 통로를 가리킨다. 우리..

    C++ _if STL 알고리즘 함수 (파라미터 _Pr _Pred) > 조건자 (Predicate)

    참고할만한 부분은 _if로 끝나는 함수들만 매개변수(조건자)로 넘길 수 있다는 점, sort 함수 예외. 참고 사이트 : https://en.cppreference.com/w/cpp/algorithm #include #include #include #include #include using namespace std; bool Is_one(int _val) { return _val == 1; } class Test { public: bool operator()(int i) { return i % 4 == 0; } }; struct s_test { public: bool operator()(int i) { return i % 2 == 0; } }; int main() { // 파라미터 _Pr _Pred > ..