반응형

import pygame, sys
from pygame.locals import *

pygame.init()
DISPLAYSURF = pygame.display.set_mode((400,300))
pygame.display.set_caption('Hello World!')
while True: #main game loop
    for event in pygame.event.get():
        if even.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()

 

 

Python & Pygame 무료온라인북
http://inventwithpython.com/pygame/chapters/
반응형
반응형

외적 연산(Cross Product)란?

- 임의의 두 벡터와 직교를 이루는 벡터

EX) Cross(A , B)란? A가 B 를 감싸는 형태가 될때 직교가 되는 벡터

- 오른손 손가락 두개를 피고 검지를 A라 하고 중지를 B라 했을때, 왼손 끝을 오른손 검지에 반대로 맞닿고 감싸쥐는 형태

 

EX) Cross(B, A)란? B가 A를 감싸는 형태가 될때 두 벡터와 직교가 되는 벡터

- 왼손을 중지에 맞닿고 감싸쥐는 형태 

 

- 문제 풀이

임의의 두 벡터 A[5,2,3] B[8,1,-4]의 외적을 구해보자. Cross A B를 구해보자.

A x B = [(a2b3 - a3b2) (a3b1 - a1b3) (a1b2 - a2b1)]

계산 순서가 헷갈릴땐 아래 그림을 참고하여 순서를 기억하자.

 

=[((2x -4) - (-3 x 1))  ((-3 x 8) - (5 x -4))  ((5 x 1) - (2 x 8))

= [-5 . -4  ,  -11]

Cross A B 의결과는 [-5 -4 -11] 이라는 새로운 벡터이다. 

 

- 외적의 결과로 두 벡터 사이의 각도도 알 수 있게 된다.

내적으로 코사인을 알수 있게 됬다면 외적으로는 사인 각도를 알 수 있다.

||A X B|| = ||A|| ||B|| sin

먼저 A X B 의 크기와 ||A||  ||B||를 각각 구합니다. 다시 말해 Cross A B 의 크기를 구한다.

||A X B|| =

 ||A|| =

||B|| =

위에서 구한 값을 공식에 대입한다.

||A X B|| = ||A|| ||B|| sin

 

0.23 = sin

sin -1(0.23) = 13.2971

 

 

 

 

- 외적을 알면 어디에 도움이 될까?

EX) 나와 적의 위치를 알때 직교하는 UPVector를 알수 있도록 해준다. 그것이 UpVector가 될수도 있고,  RightVector가 될수도 있기에 상당히 유용하게 사용할 수 있게 된다.

 

 

 

EX) 폴리곤의 법선 벡터 정보를 알려준다.

폴리곤의 직교되는 법선 벡터정보를 알게 되면서 라이트 정보라든지 오브젝트 충돌등에 유용하게 사용할수 있다. 

     

 

 

반응형
반응형

내적(Dot Product)이란?

-      정규화된

한 벡터가 다른 벡터에 투영된 길이 값을 나타낸다.Ex) Dot(A , B) ? BA위치로 회전했을 때 투영되어 직교되는 위치만큼의 크기 값

 

EX2) Dot(B,A)는?

    

 

 

각 벡터를 Normalize한 후의 스칼라 곱의 결과값이며 그 값은 두 벡터의 코사인의 값과 일치한다. 그러므로 음수 인지 양수 인지 그리고 각도의 크기 값도 알아 낼 수 있다.

 

 

1.    먼저 3D맥스상에서 임의좌표를 가지는 두 개의 벡터를 만든다.

C = [5 , 2, -3]

D = [8, 1, -4]

    

2.    먼저 AB의 크기를 구한다.

 

3.    벡터의 크기 값을 활용하여 정규화(Normalize)를 한다.

 

||Normalize A|| = 1 이어야 한다! 

||Normalize B|| = 1 이어야 한다!

 

 

4.    두 벡터의 내적  A

B 을 구해 보자

A B = a1b1 + a2b2 + a3b3

= [(0.811 x 0.889) + (0.32 x 0.11) + (-0.487 x -0.444)]

= 0.72 + 0.035 + 0.216

= 0.971

 

 

 

5.    이제 내적의 결과값으로 여러가지 결과를 도출할 수 있게 됬음.

         내적의 결과 값으로 알게 된 결론은?

Dot(A,

B) > 0이면

 세타 값은 90도 이하

이므로 BA로부터 90도 각도 안에 있음을 알게 됐다.

 

è

이 결과는 게임로직에서 상당히 많이 사용될수 있다. A가 카메라이고 B가 오브젝트일경우 내적의 결과값이 양수라는 것은 BA의 시야안에 들어옴을 의미하고, 음수라는 것은 BA의 시야안에 들어오지 않음을 의미한다.

 

è

이 결과값을 토대로 디렉셔널 라이트와 오브젝트의 법선 벡터를 고려 했을 때 오브젝트가 빛을 얼마만큼 받고 있는지도 알 수 있게 됐다.

 

A가 디렉셔널 라이트이고 B가 법선 벡터를 가지고 있는 오브젝트라고 했을 때

 

이 정도의 빛을 받는 오브젝트임을 알 수 있다.

 

하지만, Dot(A, B)  = 1이라고 한다면

복사량이 최대치가 되어 가장 많은 빛을 받는 상황이 된다. 12시에 떠있는 태양이라고 생각하면 이해가 빠를 듯~

 

Dot(A, B) 

= 0이라면..

빛을 전혀 받지 않는 연산임을 알 수 있게 됐다. 12시가 되겠다.

 

 

코사인 각도와 노멀라이즈 된 내적의 각도 값은 일치하므로              코사인 각도는 맥스의 Listner 창을 활용해서 쉽게 알 수 있다.

          

           두 벡터 사이의 각도가 13.832도 라는 사실도 알게 됐다.

 

내적연산은 가볍다보니 셰이더 프로그램이나 물리 스크립트 에서도 굉장히 자주 쓰이는 기본적인 연산입니다~^^

 

 

 

Cg언어에 내장된 기본적인 Dot 공식- 두 벡터에 대해 -1 ~ 1 범위의 float 값을 얻을 수 있다. -1은 평행하며 나에게서 멀어지는 벡터, 1은 평행하며 나를 향해 다가오는 벡터, 0은 나와 완전히 수직인 벡터를 의미한다.

 

 

 

 

위에서 힘들게 구한 공식을 맥스 리스너(Max Listner)에서 쉽게 확인 할 수 있다.

 

 

반응형
반응형

 

 

 

 

 

반응형

'Study' 카테고리의 다른 글

PYTHON 기본 창 띄우기 "Hello World!"  (0) 2016.06.24
외적 연산(Cross Product) 쉽게 이해하기  (0) 2015.12.31
내적 연산(Dot Product) 쉽게 이해하기  (2) 2015.12.30
삼각비의 기본  (0) 2015.12.18
반응형

대부분 삼각함수라고 하지만, 중3에 나오는 삼각비에 가까운 내용이기에 삼각비의 기본이라고 쓰겠습니다. 

 

 

반응형

+ Recent posts