본문 바로가기

반응형

진리는어디에

(291)
삼각형의 외접원 구하기 들어가며점 세 개로 이루어진 다각형을 우리는 삼각형이라고 부르고, 이 삼각형의 모든 꼭지점을 지나는 원을 '삼각형의 외접원'이라고 정의 한다.만일 여러분이 직접 컴퍼스를 들고 삼각형의 세 꼭지점이 동시에 놓이는 원을 그리려고 하면 '모든 점을 지나는 원'의 '중심'을 정확히 찾기가 쉽지 않다는 것을 알게 될 것이다.하지만 원리만 안다면 그렇게 어렵지 않게 삼각형의 외접원을 구하는 것이 가능하다. 이번 포스트에는 외접원을 구하는 원리에 대해 살펴 보도록 하겠다.원의 정의기하학에서 원(圓, 영어: circle)은 '평면 위의 한 점으로 부터 일정한 거리에 있는 점들의 집합'으로 정의 되고 있다. 좀 더 간단히 말하면 원은 '중심점'과 '반지름'으로 구성되어 있다는 말이다. 원은 중심점과 반지름을 이용해 그릴..
벡터(vector)의 연산 벡터는 두 점들 사이의 차이 또는 변위(displacement)를 나타낸다. 기하학에서의 벡터기하학에서의 벡터(일반적으로 'v' 라고 표현)는 크기(또는 길이)와 방향을 가지는 요소이고 끝이 화살표인 선분으로 표현된다. 길이(or 크기)가 1인 벡터는 '단위' 또는 '정규화된' 벡터라고 한다.'제로 벡터'는 길이가 0이고 방향을 가지지 않는다.벡터는 위치를 가지지 않는다. 위치와 상관 없이 동일한 크기와 방향을 가지는 벡터는 같다.기하학에서 벡터는 '방향'과 '변화', 이 두가지 의미로 사용 될 수 있다. 벡터의 덧셈 뺄셈실수와 마찬가지로 벡터도 산술 연산이 가능하다. 벡터의 덧셈은 두 벡터를 결합하여 새로운 벡터를 만든다. 벡터의 덧셈의 대수학적 법칙은 실수의 덧셈과 유사하다.v + w = w + v ..
단위 벡터(Unit Vector) 단위 벡터(Unit Vector)란?단위 벡터는 크기(길이)가 1인 벡터를 의미한다. 주로 벡터의 방향을 나타내는데 사용되며, 벡터의 정규화(normalization)를 통해 얻을 수 있다.단위 벡터는 원래의 벡터 방향을 유지하면서 길이를 1로 조정한 벡터단위 벡터의 특징크기(길이) : 단위 벡터의 크기는 항상 1이다.방향 : 단위 벡터는 원래 벡터와 같은 방향을 가지며, 벡터의 방향만을 나타낸다.표기법 : 일반적으로 단위 벡터는 아래 처럼 모자(^)를 씌워 표현하거나 ei형태로 나타낸다.단위 벡터의 예2차원 : i = (1, 0), j = (0, 1)3차원 : i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1)단위 벡터를 구하는 방법(정규화)일반 벡터에서 단위 벡터를 구하는 ..
[C++] 스레드 동기화 - lock_guard 들어가며 이전 포스트 '스레드 동기화 - mutex'에서는 C++ 표준 라이브러리에서 제공하는 std::mutex 객체의 lock, unlock 함수를 직접 호출하여 크리티컬 섹션에 진입할 수 있는 스레드를 직접 컨트롤 했었다. 하지만 이런 방법은 앞으로 살펴 볼 '실수'를 유발할 수 있고, 이 실수들은 데드락을 발생 시켜 프로그램을 영원히 블록 시킬수 있다. 이번 포스트에서는 std::mutex의 멤버 함수를 직접 호출할 때 야기할 수 있는 '실수'들을 살펴 보고, std::lock_guard를 사용했을 때의 이점에 대해 살펴 보도록 하겠다. std::mutex의 문제 위에서 std::mutex의 lock과 unlock 멤버 함수를 직접 호출하는 경우 프로그래머의 '실수'로 인해 프로그램이 데드락 상태..
[C++] 스레드 동기화 - mutex 들어가며 이번 포스트는 C++에서 스레드간 동기화를 위해 제공하는 std::mutex에 대해 자세히 알아 보도록 하겠다. 본 포스트에서는 mutex가 무엇인지 크리티컬 섹션이 무엇인지 같은 교과서적인 기본 내용을 다루기 보다는 C++에서 제공하는 std::mutex 의 특징과 사용법에 대해 집중하도록 한다. 스레드 동기화에 대한 원론적인 개념에 대해 궁금하신 분들은 Operating System Concepts 같은 전통적인 컴퓨터 공학 전공 서적을 살펴 보시거나 간단 하게는 나무위키의 뮤텍스 항목을 살펴 보는 것도 도움이 될 것이다. C++ 표준이 제공하는 mutex 종류 C++ 표준 라이브러리에서는 아래와 같이 총 6가지의 뮤텍스를 제공하고 있다. std::mutex(C++11) std::timed_..
[Rust] Hello World 들어가며 이번 포스트에서는 전통적인 프로그래밍의 시작점인 'Hello World'를 출력하는 프로그램을 러스트로 작성해 보며 러스트의 기본 요소들을 살펴 보도록 하겠다. hello.rs 러스트 소스 파일의 확장자는 .rs 다. 에디터를 열어 아래와 같이 'hello.rs' 소스 파일을 작성해 보자. 소스 코드를 작성하기 위해서는 간단한 메모장 프로그램을 이용해도 상관 없지만 필자의 경우는 여러 에디팅 기능이 지원되는 Visual Studio Code를 즐겨 이용한다. Visual Studio Code와 러스트의 연동 방법은 [여기]를 참고하자. // hello.rs fn main() { println!("Hello World"); } 위와 같이 작성이 끝난후 컴파일과 실행을 해보기 위해서는 [Rust] ..
[C++] 템플릿 특화(Template specialize) 완벽 가이드 템플릿 특화란? C++은 하나의 코드로 다양한 타입에 대응할 수 있는 템플릿이라는 도구를 제공한다. 이 글을 읽는 여러분은 이미 템플릿에 대해서는 알고 있다고 가정하고, 이번 포스트에서는 템플릿 특화(Template specialization)에 대해 살펴 보도록하낟. 템플릿 특화(Template specialization)는 특정 타입의 템플릿 인자에 대응하는 특별한 템플릿 클래스를 정의할 수 있는 기능이다. 참고로 템플릿 특화는 템플릿 특수화라고도 번역 되며 특화나 특수화나 같은 의미니 다른 곳에서 특수화라고 표현되는 글을 본다고 하더라도 당황하지 말도록 한다. 설명을 위해 우선 아래 일반 템플릿 클래스의 예제 코드를 살펴 보도록 하자. 아래에서는 템플릿 인자로 T와 U를 받을 수 있는 Widget이..
[VBA] 에러 처리 완벽 가이드 이 포스트는 Excel Macro Mastery 사이트의 'VBA Error Handling - A Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 VBA의 에러 처리 방법에 대해 다룹니다. 들어가며 본 포스트는 'VBA 에러 처리'에 대한 자세한 가이드를 제공합니다. VBA 에러 처리에 대해 이미 익숙하며 기억을 더듬기위한 레퍼런스가 필요하신 분은 아래 Quick Guide 테이블을 참고해 주세요. VBA 에러 처리에 대한 특정 주제를 찾고 있다면 오른쪽의 목차에서 찾아 보시면 됩니다. 만일 여러분이 VBA에 대해 익숙하지 않으신 분이라면 본 포스트는 논리적인 순서로 배치되어 있으므로 처음 부터 끝까지 읽어 보시길 권장합니다. Quick Guid..
[C++] static 키워드 완벽 가이드 들어가며 C++에서 static 키워드는 간단한 사용법을 가지지만 복잡한 의미를 가지고 있는 아이러니한 키워드다. 함수든 변수든 간단하게 static이라는 키워드 여섯글자만 붙여 주면 무엇이든 static 속성을 가지게할 수 있지만 사용되는 각 위치에 따라 적용 되는 의미가 다양하기 때문에 각각의 static에 대한 의미를 잘 숙지하고 사용하여야 한다. 이번 포스트에서는 static 키워드의 기본 속성과 각 사용처에 따라 static 키워드가 가지는 의미, 주의해야 할 점, 프로그램 트릭들을 살펴 보도록 한다. static 변수 이번 섹션에서는 static 변수에 대해 살펴 보자. C++에서 static 변수란 기본 변수 선언 앞에 static 키워드를 추가하여 선언된 변수다. static int var..
[C++] 제네릭 람다 표현식 들어가며 이번 포스트에서는 C++14 부터 포함된 제네릭 람다 표현식에 대해 살펴 보도록 하겠다. 제네릭 람다 표현식은 auto 키워드를 이용해 하나의 람다 표현식 코드로 다양한 타입의 인자들에 대해 대응할 수 있는 람다 표현식을 말한다. 일반 람다 표현식 vs 제네릭 람다 표현식 먼저 일반적인 람다 표현식과 그 사용을 살펴 보자. auto add = [](int a, int b) { return a + b; }; std::cout

반응형