분류 전체보기 (12) 썸네일형 리스트형 데이터를 전송하는 순서 낮은 주소에 저장된 데이터부터 전송한다. 삼각함수 덧셈정리 증명(그래픽스에서 물체의 회전에 사용) 단위원(반지름1)에서 두점 p와 q가 존재하고 각 점의 각이 α와 β일 때 삼각함수 덧셈정리 증명 p(cosα, sinα) q(cosβ, sinβ) 코사인법칙에 따라서 pq^2 = op^2 + oq^2 - 2*op*oq*cos(poq) (cosα - cosβ)^2 + (sinα - sinβ)^2 = 1(반지름) + 1(반지름) - 2 * 1 * 1 * cos(α - β) cos^2α - 2cosαcosβ + cos^2β + sin^2α - 2sinαsinβ + sin^2β = 2 - 2*cos(α - β) 2 - 2cosαcosβ - 2sinαsinβ = 2 - 2*cos(α - β) cos(α - β) = cosαcosβ + sinαsinβ 완성 β자리에 -β를 넣어보자. cos(α + β) = cos.. 선형 변환 선형변환 변환이 선형적하다는 것은 두가지 속성을 의미한다. 1. 모든 선들은 변환 이후에도 휘지 않고 직선이어야 한다. 2. 원점은 변환 이후에도 여전히 원점이어야 한다. 일반적으로 선형변환이라면 격자 라인들이 변형 이후에도 여전히 "평행"하고 "동일한 간격"으로 있어야 한다. 변환들을 수치적으로 표현하는 것은 두 개의 기저벡터(i-hat, j-hat)가 어떻게 변하는지만 알면 된다. 변환 전과 변환 후에도 i-hat과 j-hat의 기준을 따라간다. 즉, 변환전에 v벡터를 이루는 i-hat과 j-hat의 어떤 선형 결합이 변환 후에도 같은 선형결합을 유지한다. -> 두 개의 기저벡터(i-hat, j-hat)의 변형위치만 알면, 벡터 v를 추론할 수 있다. a b c d 2x2 행렬에서 첫번째 열(a, c.. 잘 쓰이는 STL 간단 정리 vector 벡터는 배열과 비슷하다 하지만 동적으로 크기를 늘리고 줄이는 점이 다르다. vector vc; 이래 선언하면 하나의 벡터에 아이템을 추가할 수 있고 vector vc[10]; 이래 선언하면 벡터 배열이 순차적으로 구현되며 각각의 배열 요소마다 아이템을 추가할 수 있다. 크기 변경 가능 순차 접근 가능 랜덤 접근 가능(인덱스를 이용하여) 다만 배열이기 때문에 중간에 삽입하거나 삭제를 한다면? 삽입하게 되면 그 요소 다음 원소부터 싹다 밀어서 저장해야하고 삭제하게 되면 그 요소 다음 원소부터 싹다 당겨서 저장해야하기 때문에 삽입, 삭제가 빈번하면 효율적이지 못하다. list 리스트는 이중 연결리스트로써 구현이 된다. 이중 연결리스트라 하면은 배열처럼 순서 있게 구현되는 것이 아니라 서로를 가리키.. protocols and standards ( 프로토콜과 스탠다드) 컴퓨터 구조 책 보다가 기억이 남아서 그냥 standards(스탠다드)는 다른 컴퓨터 또는 다른 시스템에서도 동일한 동작을 보장하게 하는 제조자들 또는 이해당사자들의 합의라고 할 수 있다. 예를 들면 파일의 포맷(gif, jpeg), 컴퓨터 전압, 연결장치의 핀의 물리적 공간 컴퓨터 언어 java나 sql의 경우에는 프로그래머들이 함께 일하고 프로그램을 유지보수 할 수 있게 한다. protocols(프로토콜)은 대화를 가능하게 하는 구체적인 합의된 기본 규칙을 말한다. 프로토콜은 컴퓨터 사이 간의 대화를 위해서 존재한다. 클라이언트-서버 시스템에서의 프로토콜은 요청을 이해하고 이행하고 응답하는 것을 올바르게 번역하는 것을 보장한다. HTTP, TCP/IP 음... 프로토콜은 두 시스템 간의 통신하기 위한.. c++ algorithm min() 음 알고리즘 문제풀다가 클래스를 구현했다. 세개의 비용 요소를 int로 선언해서 생성자로 입력받았다. 그런데 여기서 가장 작은 요소를 뽑아야되서 min()을 사용했다. 근데 C2064 항은 2개의 인수를 받아들이는 함수로 계산되지 않습니다 라고 오류가 뜨길래 이게뭐지? 하고 찾아보다가 문득 reference 가서 다시 확인해 보았는데 min은 3개가 아니라 2개를 비교하는거다 ^^ 그래서 어떻게 비교했냐면 min(a, min(b,c))로 했다. c++ 벡터 중괄호()와 대괄호[] 선언 차이 벡터를 알고 난 이후에 유용하게 쓰고 있던 나는 또 빨간줄을 발견하고는 찾아보았다. vector vc(5); 와 vector vc[5]; 의 차이를 말이다. 첫번째의 경우 5칸 짜리 벡터 배열을 하나 만든다는 거고 0~4 까지의 인덱스를 가지는 벡터 한줄 만드는 거다. 두번째의 경우는 5칸짜리 벡터 배열을 5개 만드는 거다. 즉 크기5배열이 5개가 묶여있는거다. 그래서 접근할 때 잘해야하는데 일단 초기화가안되어 있기 때문에 size가 전부 0 이다. 이상황에서 접근하면 vector subscript out of range 에러가 뜬다. 벡터에 값하나 없는데 접근하려 하니 범위 오류가 뜨는 거다. 이때는 vc[0].push_back(1); 과 같이 내가 값을 넣을 벡터 배열의 인덱스를 지정해주고 거기에 아.. 문자열을 자르고 싶다면 C++ 문자열을 자를 때는 strtok() 함수를 사용한다. 근데 이친구는 C++에서 string 클래스 자체에서는 사용할 수가 없다. 그래서 C형태의 배열 char*[]형태로 바꿔놓고 사용해야한다. 1. 문자열 하나 입력받는다. 2. new를 이용해서 복사할 임시 버퍼를 만들어 놓는데 이 버퍼가 char*[] 형태로 만들어야 한다. 3. strcpy() 와 c_str() 을 이용해서 문자열을 버퍼에 복사한다. 4. strtok() 함수의 경우 "-"를 기준으로 자른다고 하면 처음부터 -까지 자르고 그 시작주소를 가지게 된다. 5. tok가 nullptr이 아닐때까지 반복수행한다. string 배열의 처음부터 string(tok)를 저장한다. tok = strtok(nullptr, "-"); 이건 다음 문자열을.. cin, cout 속도 빠르게 하기 printf, scanf 가 cin, cout보다 속도가 빠르다. 근데 string 클래스 같은경우 string 변수를 출력하거나 입력받을 때 printf(), scanf()로 받으면 좀 문제가 있다고 한다. https://stackoverflow.com/questions/10865957/printf-with-stdstring STL 컨테이너 반복자 iterator 우리가 배열을 순회할때 int i=0 처럼 STL 컨테이너를 순회할때는 iterator라는 것을 사용한다. 이 친구는 반복자로 STL컨테이너의 메모리 주소를 가리킬 때 사용한다. std::vectorarr; 라는 int형 벡터가 있다고 해보자. 나는 arr.push_back()을 사용해서 여러 자료들을 담았다. 그럼 그 자료들을 순회하고 싶다면 같은 자료형으로 iterator을 선언하면 된다. std::vector::iterator ptr 메모리 주소를 가리키기 때문에 포인터다. for(ptr=arr.begin(); ptr!=arr.end(); ++ptr){ printf("%d",*ptr); // 해당 포인터가 가리키는 값 출력 } 이전 1 2 다음