math 에 해당하는 글3 개
2007/04/29   Area of a triangle via the cross product
2006/06/09   Bezier Curve Example
2006/06/09   Bezier curves

math&physics | 2007/04/29 18:53

막상 3D 상의 임의의 세 점으로 구성된 삼각형의 넓이를 구하려고 하면 좀처럼 마땅한 방법이 떠오르지 않는다. 여기에 비교적 간단한 방법으로 공간상의 삼각형 넓이를 구하는 방법을 소개한다

공간상의 두 벡터 P,Q 가 주어졌을때, 외적(cross product) 은 다음의 식을 만족한다.



사용자 삽입 이미지


위식의 우변을 잘 살펴보면 외적 PxQ 의 크기가 P와 Q에 의해 만들어지는 평행사변형의 넓이와 같음을 알수 있다. 이를 이용하면 꼭지점이 P,Q,R 인 임의의 삼각형의 넓이A를 다음과 같은 식에 의해 계산할 수 있다.


사용자 삽입 이미지



예를 들어 P(4, 2, -1), Q(-1, 4, 2), R(2, 1, -4) 같이 세점으로 구성된 삼각형 넓이를 구해보면,

PQ
= [-1 - 4]i + [4- 2]j + [2- (-1)]k = -5i +2j + 3k.

PR = [2 - 4]i + [1 - 2]j + [-4 - (-1)]k = -2i - j - 3k.

PQ X PR = <2*(-3)-3*(-1) , 3*(-2)-(-5)*(-3) , (-5)*(-1)-2*(-2)>
               =  <-3,-21,-1>

A=1/2 * sqrt( (-3)*(-3) + (-21)*(-21) + (-1)*(-1) ) = 10.618



 
 
태그 : cross product, math, vector
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/94

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

math&physics | 2006/06/09 14:47

조절점이 3개일 경우 일반 베지에 곡선의 일반식
B
(u) = P0 * ( 1 - u ) 2 + P1 * 2 * u ( 1 - u ) + P2 u2

을 이용하면 단순히 베지에 곡선을 그리는 것으로 끝나는 것이 아니라 각 포인트를 추적할 수 있다.
플래시에서 제공하는 curveTo 메서드도 물론 위 공식에 의한 계산으로 곡선을 그리는 것이지만
그리는것 이상의 것은 할 수 없었다.

function
bezierPoint(mc:MovieClip,t:Number){
var x = ( 1 - t ) * ( 1 - t ) * mc.p1._x + 2 * t * ( 1 - t ) * mc.p2._x + t * t * mc.p3._x;
var y = ( 1 - t ) * ( 1 - t ) * mc.p1._y + 2 * t * ( 1 - t ) * mc.p2._y + t * t * mc.p3._y;
mc.point_mc._x=x;
mc.point_mc._y=y;
}

control point 와 anchor point  를 지정해 곡선을 그리고 더 나아가 그린 곡선위의 포인트를 계산에 의해 추적이 가능하다. 즉, 스크립트로 모션이 가능하다.



 
 
태그 : bezier curve, math
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/28

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

math&physics | 2006/06/09 13:39

3차원 공간에 있는 N+1개의 조절점(control point) pk (k=0,1,...,N)를 생각해봅시다. 베지어 parametric 곡선 공식은 다음과 같습니다.

B(u)는 서로 다른 위치에 있는(discrete) N개의 조절점에 의해 얻어지는 곡선을 구하기 위한 연속함수입니다. u=0이면 첫번째 조절점(k=0)에, u=1이면 마지막 조절점(k=N)에 도달합니다. 아래는 N=4, 즉 조절점이 4개인 경우의 곡선 모습입니다.
역자 주 : 첫번째 조절점이 시작점, 마지막 조절점이 끝점이라고 생각하시면 쉽겠죠? ^_^
그리고, N개의 조절점이 아니라 N+1의 조절점이라고 해야 하는 듯.
나중에 나오지만, 조절점의 위치가 모두 각각 다를 필요는 없습니다.

주의점:

  • 이 베지어 곡선은, 조절점 중 처음과 끝 점을 빼고는 보통 어느 조절점과도 만나지 않습니다. 공식을 사용하면 B(0) = P0 이고 B(1) = PN 이 되겠지요.

  • 곡선은, 항상 조절점으로 이루어진 다각형 안에 들어가게 됩니다. 곡선이 조절점들 사이에서 크게 벗어나거나 하는 일은 없습니다.

  • 조절점이 P0 하나뿐이라면, 즉 N=0 이라면 모든 u에 대해 B(u) = P0 입니다. (역자 주 : u는 0이상 1 이하의 실수)

  • 조절점이 P0 , P1 두개뿐이라면, 즉 N=1이라면 이 공식은 두 점 사이를 잇는 선분을 만들어냅니다.


  • 라는 부분은 blending 함수라고 하는데, 이 부분에서 조절점들을 blend해서 곡선을 생성하기 때문입니다.

  • blending 함수는 조절점의 갯수보다 차수가 하나 낮은 다항함수입니다. 예를 들어, 3개의 조절점이 있다면 베지어 곡선은 포물선을 그리고, 4개의 조절점으로는 3차곡선을 얻게 됩니다.

  • 첫번째 조절점의 위치와 마지막 조절점의 위치가 같을 경우 폐곡선이 생깁니다. 이때 처음의 두 조절점 사이의 접선(tangent)과 끝의 두 조절점의 접선이 같을 경우, first order continuity가 가능합니다. (역자 주 : P0 - P1 간의 기울기와 PN-1 - PN 간의 기울기가 같을 경우..라고 보시면 되겠습니다. first order continuity는, 두 곡선의 (1계)도함수가 같은, 즉 접선의 기울기가 서로 같은 상태를 의미합니다.)

  • 비슷한 위치에 여러 조절점이 있을 경우, 그쪽으로 베지어 곡선을 "당기는" 정도가 증가합니다.

  • 조절점의 갯수가 많아지면, 좀더 높은 차수의 식과, 많은 횟수의 팩토리얼 값을 계산해야 합니다. 그래서 보통 긴 곡선을 만들 때는, 그 곡선을 다시 여러 곡선으로 작게 쪼개는 방법을 씁니다. 이렇게 하면, 전체적인 모습에 변화를 주지 않고도 곡선의 부분적인 형태를 쉽게 바꿀 수 있는 효과도 얻게 됩니다. 물론 곡선이 첫번째 조절점에서 시작해서 마지막 조절점에서 끝나기 때문에, (나눠진) 곡선 조각들을 이어붙이기는 쉽습니다. 또한 베지어 곡선에서는 마지막 점에서의 접선이 마지막 두 조절점을 이은 선과 같기 때문에, (나누어진 곡선들의) 첫번째 조절점의 기울기도 맞출 수 있습니다.
    Second order continuity는 보통 불가능합니다. (역자 주 : Second order continuity는, 이계도함수의 값이 같을 때의 상태입니다. 즉, 곡선의 변화율이 같다는 뜻입니다.)

  • 조절점이 2개인 특수한 경우(직선)을 제외하고는, 한 베지어 곡선에 평행한 다른 베지어 곡선을 유도(derive)해내는 것은 불가능한 것으로 알려져 있습니다.

  • 베지어 곡선으로 원을 완벽하게 표현할 수는 없습니다.

  • coincident parallel curves나 직선인 베지어 곡선의 경우를 제외하고는, 한 베지어 곡선에 평행한 베지어 곡선을 만드는 것은 불가능합니다.

  • 조절점이 3개일 경우는 공식이 다음과 같이 정리됩니다 :

    B(u) = P0 * ( 1 - u ) 2 + P1 * 2 * u ( 1 - u ) + P2 u2

  • 조절점이 4개일 경우는 공식이 다음과 같이 정리됩니다 :

    B(u) = P0 * ( 1 - u )3 + P1 * 3 * u * ( 1 - u )2 + P2 * 3 * u2 * ( 1 - u ) + P3 * u3


 
 
태그 : bezier curve, math
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/27

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기


[PREV] [1] [NEXT]

 
전체 (105)
flash (74)
math&physics (4)
programming (11)
Flex2 (1)
Mac (2)
photo (0)
project (6)
주저리주저리 (3)
유용한 자료들 (1)
diary (0)
Book (1)
web (2)
«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31