본문 바로가기

공부

(39)
그래픽스 기본 요소의 속성 색 모델 1. 색의 성질 가시광선 사람의 눈으로 볼 수 있는 일정 주파수 범위의 전자기파 가시 영역의 모든 주파수를 포함하는 백색광이 물체에 입사되면 일부 주파수는 반사되고 나머지는 흡수됨 대부분의 물체는 스스로 빛을 내는 것이 아닌 외부의 빛을 반사함 빛의 에너지 분포와 지배주파수 지배 주파수: 백색광이 물체표면에서 반사되었을 때, 가장 강한 피크주파수(E_D) 지배 주파수와 지배 주파수가 아닌(E_W)주파수가 같이 반사된다. 색의 3 요소 색조(hue): 빛의 색을 결정하는 요소, 지배주파수에 해당하는 색 성분 채도(saturation): 색이 순수한 스펙트럼 색에 얼마나 가까운가를 나타내는 요소, E_d - E_w 명도(brightness, luminance): 빛의 전체적인 에너지 크기에 해당하는..
[effective C#] 1장 C# 언어 요소 (아이템 8 ~ 10) 아이템8: 이벤트 호출 시에는 null 조건 연산자를 사용하라 이벤트 핸들러가 결합되어 있는지 확인하는 코드를 추가하다 이벤트가 있는지 확인하는 코드와 이벤트를 발생시키는 코드 사이에 경쟁 조건(race condition)이 발생할 가능성이 있다. 이 문제는 C# 6.0의 null 조건 연산자를 사용하면 깔끔하게 해결할 수 있다. null 조건 연산자는 원자적으로 처리된다 아이템9: 박싱과 언박싱을 최소화하라 값 타입은 다형적이지 못하다. .Net Framework는 모든 타입의 최상위 타입을 참조 타입인 System.Object로 정의하고 있다. .Net Framework는 박싱과 언박싱이라는 방법을 통해 이 두 가지 서로 다른 타입을 이어준다. 박싱과 언박싱은 성능에 좋지 않은 영향을 미친다. 때로는..
[effective C#] 1장 C# 언어 요소 (아이템 5 ~ 7) 아이템5: 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라 아이템4 에서 다룬 문자열 보간 기능의 결과로 생성되는 반환값은 문자열일 수도 있지만 FormattableString을 상속한 타입일 수도 있다. 다음 코드는 FormattableString 타입의 객체를 이용하여 문화권과 언어를 지정하여 문자열을 생성하는 방법을 나타낸다. public static string ToGerman(FormattableString src) => string.Format(null, System.Globalization.CultureInfo.CreateSpecificCulture("de-de"), src.Format, src.GetArguments()); public static string..
[effective C#] 1장 C# 언어 요소 (아이템 1 ~ 4) C++이나 Java처럼 C#을 사용하면 C#의 고유한 장점을 살릴 수 없을 뿐더러 심각한 문제 상황에 처할 수 있다. 이번 챕터에서는 C#을 C#답게 쓰기 위한 핵심 요소를 살펴볼 것이다. 아이템 1: 지역변수를 선언할 때는 var를 사용하는 것이 낫다 C#언어는 익명타입을 지원하기 위해 타입을 암시적으로 선언할 수 있는 손쉬운 방법을 제공한다. 정확한 반환 타입을 알지 못한 채 올바르지 않은 타입을 명시적으로 지정하게 되면 득보다 실이 많다. → IEnumerable과 이를 상속하는 IQueryable 등 정확히 기술된 타입 자체보다는 타입을 유추할 수 있는 변수의 이름이 더 큰 도움이 된다. var를 사용했는데 더 어지러운 경우 메서드 이름만으로 반환 타입을 짐작하기 어려운 경우가 있는데, 이럴때 v..
[방송대 알고리즘]분할정복 알고리즘 ※ 방송대 교재의 예제를 참고하여 작성하였습니다. 디테일한 내용은 교재를 참고 바랍니다. 분할정복 알고리즘 순환적으로 문제를 푸는 하향식 접근 방법 주어진 문제의 입력을 더 이상 나눌 수 없을 때까지 두 개 이상의 작은 문제로 순환적으로 분할하고, 이렇게 분할된 작은 문제들을 각각 해결한 후 이 해들을 결합해서 원래 문제의 해를 구하는 방식 분할된 작은 문제는 서로 독립적, 순환적 분할 및 결과 통합이 가능 분할된 작은 문제는 원래 문제와 동일 분할정복 방법의 처리 과정 분할: 주어진 문제를 여러 개의 작은 문제로 분할 정복: 작은 문제를 순환적으로 분할, 더 이상 분할되지 않을 정도로 크기가 충분히 작다면 순환호출 없이 작은 문제의 해를 구함 결합: 작은 문제에 대해 정복된 해를 결합하여 원래 문제의 ..
[방송대 알고리즘]동적 프로그래밍 ※ 방송대 교재의 예제를 참고하여 작성하였습니다. 디테일한 내용은 교재를 참고 바랍니다. 동적 프로그래밍 상향식 접근 방법으로 소문제를 이용하여 보다 큰 크기의 문제를 해결하는 방법 동적 프로그래밍 방법을 적용하려면 최적성의 원리를 적용해야함 최적성의 원리: 주어진 문제에 대한 최적해는 주어진 문제의 소문제에 대한 최적해로 구성된다. 피보나치 수 동적 프로그래밍을 이용하면 O(n) 연쇄 행렬 곱셈 문제 행렬의 곱셈에 결합법칙이 성립됩을 이용 n개의 행렬을 곱하는 최적의 순서는 n개의 행렬의 어떤 부분집합을 곱하는 최적의 순서를 포함 C(i,j) → i,j 범위 내의 최소의 코스트 크기가 nxm 인 행렬과 mxk인 행렬을 곱하면 필요한 연산 수는 nmk 이다! P(i,j) → 최적의 곱셈 순서를 알기 위한..
컴퓨터 그래픽스의 기본 요소 - 점, 선, 원뿔곡선, 다각형 컴퓨터 그래픽스의 기본 요소 DDA 알고리즘 - Digital Differential Analyzer - |m|에 따라 기준 축을 정한 후, 기준 축의 좌표가 1만큼 변화할 때 나머지 축 좌표의 변화를 구하여 다음 점의 좌표를 계산 - |m| 1인 경우: y축 좌표를 1씩 변화시킬 때, x축 좌표를 1/m만큼 변화시켜 다음 점의 좌표를 계산(기울기가 완만한 경우) - 계산된 좌표를 반올림하여 구한 정수 좌표 위치에 점을 그림 ​ |Xend - X0| >= |Yend - y0| - 완만한 경우, x의 이동을 기준 - Xk+1 = Xl + 1, Yk+1 = Yk + m ​ |Xend - x0| < |Yend - Y0| - 가파른 경우, y의 이동을 기준 - Yk+1 = Yl + 1, Xk+1 = Xk + 1..