04 Vectors Tools For Graphics(part2)

Download Report

Transcript 04 Vectors Tools For Graphics(part2)

4장 Vectors Tools for Graphics
(Part 2)
창원대학교 정보통신공학과
박동규
4.6 finding the intersection of two line segments
• 문제
– 두 개의 선이 주어졌을 때, 교차하는지 결정.
– 만약 교차한다면 교차점을 찾아야 함.
• 해
– 5가지 경우 고려
IVIS Lab, Changwon National University
AB Segment AB(t)  A  bt, b  B  A 0  t  1
CD Segment CD(u)  C  du, d  D  C 0  u  1
parent line 이 교차 한다면 다음 식을만족하는 t와 u값 필요.
A  bt  C  du
그리고 c  C-A 정의
bt  c  du
 1
양변에 d 을 내적하면 d   du  0
d   bt  d   c
 Case 1 : The Term d   b  0 이면
d  c
t   , 유사하게 1의 양변에 b 을내적하면 b   bt  0
d b
b  c
u 
b d
이제 0  t,u  1 이면교차, 교차점 I는
 d  c 
I  A      b
 b d 
IVIS Lab, Changwon National University
 Case 2 : d   b  0
d 와 b 는 평행함.
두 세그먼트는 중첩될 개연성이 있으며
만일 평행한 부모 선분이 동일할 경우에 한하여 중첩된다
Practice exercies
C가 AB의 parent line 에있는지검사.
bx(y  Ay )  by(x  Ax )  0
1에다
1 AB의 parent line
equation
C x , C y 를 대체. 좌변이 0이 아니라면 교차하지않음.
만약 parent line 이 동일하다면그들 끼리의교차 유무 검사.
A와 B를 통해서C와 D 까지도달 하는 값 tc ,t d
parent line 이 동일 x성분만 검사 0 ,1,tc ,t d  ordering
직선들의 상대적인 위치를 알 수 있음.
IVIS Lab, Changwon National University
4.6.2 교차 결정 알고리즘
• segIntersect()
– If (segIntersect(A,B,C,D,InterPt)) <do something>
– Segments가 교차 InterPt 교차점, return 1
– Segments가 교차하지 않으면 return 0
– 두 Segment의 parent lines 동일하다면 return -1
IVIS Lab, Changwon National University
4.6.1 선분교차의 응용: 세 점을 지나는 원
• 외접원(Excircle)
– 세 점 A,B,C가 주어졌을 때, 이 세 점을 통과하는 유일한 원
IVIS Lab, Changwon National University
외접원 구하기
• Figure 4.36(c) 외접원을 구하는 방법
– S :그리고자 하는 원의 중심, 세 점으로부터 같은 거리에 있는 점
– 삼각형 ABC 각 변의 수직 이등분선(Perpendicular bisector)상에
있음.
M is given by (A  B)/2
A, B의수직이등분선 L
Direction : (B-A) 
Start point : M
인유한 직선.
1
 L(t)   A  B   ( B  A)  t
2
IVIS Lab, Changwon National University
a  B A
b  C  B;
c  A  C.
the perpendicu lar bisector of AB is A  a / 2  a t.
the perpendicu lar bisector of AC is A  c / 2  c u.
원의중심 : 위의 두직선세그먼트의 교차점 찾기
a t  b/ 2  c u (where a  b  c  0)
u 제거 t  1 2 (b  c) /( a   c).
|S-A|
a
1
bc  
 S  A   a   a  and radius 
2
a c 
2
IVIS Lab, Changwon National University
 bc 
   1
 a c 
2
예제
• Example 4.6.2
– Find the perpendicular bisector L of the segment S having
endpoints A=(3,5) and B=(9,3).
Solution :
By direct calculatio n , the midpoint M  ( 6,4 ), and (B-A)   ( 2,6 )
, so L has the representa tion L(t)  ( 6  2t,4  6t). It is useful to plot
both S and L to see this result.
IVIS Lab, Changwon National University
4.7 선분과 평면의 교차 검사: 클리핑
R(t)  A  ct  a ray
normal form n  (P-B)  0 t  t hit , the hit time.
A  ct hit 점 line 혹은 평면의 법선식을 만족해야함.
n  (A  ct hit  B)  0
n  (A  B)  n  ct hit  0 ,
n  (B  A)
nc
만약 t hit  0 이면 n  c  0, or when th e ray is aimed parallel to the plane,
t hit 
in which case there is no hit at all.
hit point Phit  A  ct hit , ( hit point , 2D and 3D cases )
IVIS Lab, Changwon National University
If n  c  0, the ray is aimed " along with" the normal.
If n  c  0, the ray is parallel to the line.
If n  c  0, the ray is aimed " counter to " the normal.
IVIS Lab, Changwon National University
• Practice Exercise
4.7.2 Rays hitting planes
Find the point wher e the ray( 1,5,2 )  ( 5,-2 ,6 )t hits the plane
2 x-4 y  z  8
풀이:
평면상의임의의 한 점 B  (0,0,8)
평면상의임의의한 점B와 ray와 평면이만나는 곳의 벡터
A  ct hit  B
벡터와 평면의법선벡터의내적  0
n  (A  ct hit  B)  0
n  (A  B)  n  ct hit  0 ,
n  (B  A)
nc
(2,4,1)(( 0,0,8)  (1,5,2))  2  20  6


1
(2,4,1)(5,2,6)
10  8  6
t hit 
t hit
IVIS Lab, Changwon National University
4.8 다각형 교차 문제
• 삼차원 그래픽스에서 객체들은 종종 다각형 메쉬로 모델
링 됨.
• 객체의 피부를 구성하는 폴리곤들의 집합.
• 다변체(Polyhedron)
– Skin이 닫혀진 면들로 형성됨.
IVIS Lab, Changwon National University
• 주어진 점 P가 오브젝트의 내부에 있는가 외부에 있는가
• 주어진 광선 R이 오브젝트와 처음 만나는 점이 어디에 있는가
• 주어진 선분 L의 어느 부분이 오브젝트의 내부에 있고, 외부에 있는
가?
IVIS Lab, Changwon National University
4.8.1 볼록 다각형과 다변체(polyhedra)
• 임의의 다각형 또는 다변체와 선분과의 교차는 상당히 복잡함
• 그러나 볼록 다변체일 경우 문제가 단순해짐
– 볼록 다변체는 경계 평면“bounding planes”의 집합에 의해서 완전하게
기술된다.
• 그래서 경계가 없는 직선이나 평면의 집합과 선분과의 교차검사만 하
면됨
IVIS Lab, Changwon National University
• 그림 4.41은 2D인 경우
– 각 경계 선분은 두개의 반공간(half-space)를 정의함: 다각형을
포함하는 내부의 반공간과 다각형과 점을 공유하지 않는 외부의
반공간
– 그림 (c)는 경계 선분 L2와 관계된 반공간의 외부를 보여줌
IVIS Lab, Changwon National University
• 볼록 다각형(Convex polygon)의 가장 큰 장점
– 유한한 직선들에 대해서만 교차검사 수행
– 계산을 간략하게 하기 위해서 Point normal form 사용.
– 다변체 (polyhedron)의 교차점은 half-spaces안에 있다.
IVIS Lab, Changwon National University
4.8.2 Ray Intersections and Clipping for Convex
Polygons
– 교차 문제
Entering hit point  A  ctin ;
Exiting hit point  A  ctout ;
The ray is inside P for all t in the interval [t in , t out ].
Not only Intersecti on Problem, but also clipping problem
IVIS Lab, Changwon National University
• 교차 문제
– Part (a) 는 AB 둘 다 P 밖에 위치하고 있는 경우이며, 일부가 P
내부에 있음
A  ct ; c  C-A , t  0 ~ t  1 [ray time] 동안 clip segement [tin ,tout ] 구하면됨.
– Part (b) 는 점C 가
P안에 있음. 그래서 t out이 unity 보다 커야함.
• 이 경우 A+ctin 이 다른 끝점이 됨
– Part (c)는 A와 C 둘다 P 안에 있음  clipping segment is AC.
IVIS Lab, Changwon National University
일반적으로, tin를 계산하고 0인지 비교한다. 0 보다 큰 값이면
tin은 clipped segment 의 첫번째 끝 점을나타내는 시간을 의미.
비슷하게 tin가 0보다 작은 값이면
tout이 두번째 끝점을나타내는 시간을 의미.
그래서 clipped segment 는
A  A  c  max ( 0 ,tin ) and C   A  c  min (t out ,1 )
We must consider each of the bounding lines of P in turn
and find where the ray A  ct intersects that line.
각각의 경계선을 {B, n}으로 표현한다면,
B는 직선상의점, n은 the outward  pointing normal for the line.
If n  c  0 , the ray is exiting from P.
If n  c  0 , the ray is parallel to the line.
If n  c  0 , the ray is entering P.
각각의경계 line 마다
a. bounding line 과 ray의 hit time 을 구한다.
b. ray가 polygon 에서 entering 인지 exiting 인지 구분.
IVIS Lab, Changwon National University
만약 ray 가 들어가는 중이라면, 다음 그림과 같이 P는
마침내 0과 t in 안에 들어오게 될 것이다.
가장 빠른 entering time 을 t in 으로 유지하면서
각라인의 hit time t in을 max (tin ,t hit )를 이용하여
폴리곤의경계와 가장 빨리 만나는 t hit인 t in을 구한다.
candidate interval : 객체의 내부임.
candidate interval 밖에서는어떤 t도 A  ct 가 P안에는 있지 않다.
초기에 t in  0 으로 t out  1로 하며 candidate interval 은 0,1임.
IVIS Lab, Changwon National University
1.Initiaiz e the candidate interval to [0,1].
2. For each bounding line, use Equation (4.59) to find the hit time
t hit and determine whether it is an entering or exiting hit :
 If t hit is an entering hit, set t in  max(t in , t hit ).
 If t hit is an exiting hit, set t out  min(t in , t hit ).
If at any point t in becomes greater th an t out , the ray misses P entirely,
and testing is terminate d.
3. if the candidate interval is not empty, then from
A  A  c  max ( 0,tin ) to C   A  c  min (t out ,1 )
lies inside P.
clipped line : P와 endpoints
Note that we stop testing as soon the candidate interval vanishes.  early out
IVIS Lab, Changwon National University
A specific example of clipping
We initialize t in to zero and t out to unity. The ray " starts" at A at t  0
and proceeds to point C, reaching it at t  1.
IVIS Lab, Changwon National University
• 4.8.3 Cyrus-beck 절단 알고리즘
int CyrusBeckC lip(Line & seg, LineList & L)
seg : to be clipped.
L : the list of bounding lines of the polygon.
return val ue
0 if no part of the segment lies in P (the candidate interval became empty);
1 if some part of the segment does lie in P.
Figure 4.48 shows pseudocode for the Cyrus - Beck Algorithm.
The types LineSegmen t , LineList, and Vector2
are suitable data types to hold the quantities inquestion .
(See the exercises at the end of the section)
numer  n  (B - A);
denom  n  c.
t hit 구하기 위함.
IVIS Lab, Changwon National University
IVIS Lab, Changwon National University
/*================================================================
Vector2 Class
=================================================================*/
class Vector2
{
public:
float x,y;
void set(float dx,float dy){x=dx;y=dy;}
void set(Vector2& v){x=v.x;y=v.y;}
void setDiff(Point2& a,Point2& b)//set to differnect a-b
{
x=a.getX()-b.getX();
y=a.getY()-b.getY();
}
void normalize()
{
double sizeSq=x*x+y*y;
if (sizeSq<0.0000001)
{
cerr << "\nnormalize() sees vector(0,0)!";
return;
}
float scaleFactor=1.0/(float)sqrt(sizeSq);
x*=scaleFactor;y*=scaleFactor; //정규화 시켜주기 위해 벡터의 크기를 나눔
}
Vector2(float xx,float yy){x=xx;y=yy;}
Vector2(Vector2& v){x=v.x;y=v.y;}
Vector2(){x=y=0;}
float dot(Vector2 b)
{
return x*b.x+y*b.y;
}
void perp()
{
float tmp=x;x=-y;y=tmp;
}
float perpDot(Vector2& v)
{
return x*v.x-y*v.y;
}
};
IVIS Lab, Changwon National University
• The routine chopCI()
– Bounding line과의 교차 시간을 계산
– 아래식 이용해서 Ray 가 entering 인지 exiting인지 체크.
If n  c  0 , the ray is exiting from P.
If n  c  0 , the ray is parallel to the line.
If n  c  0 , the ray is entering P.
IVIS Lab, Changwon National University
IVIS Lab, Changwon National University
• 4.8.4 clipping against Arbitrary Polygons
– We generalize this procedure to a method for clipping a
segment against any polygon.
– The ray A+ct lies inside polygon P given by the list of vertices
P0,P1,…,PN-1
IVIS Lab, Changwon National University
– Finding the intersection of two line segments:4.7
– Now we are intersecting one line segment with the sequence of line
segments associated with P.
– P의 parametrical 표현.
Pi  ei u , for u in 0,1 and i  0,1,..., N - 1 where e i  Pi 1  Pi
the ray A  ct hits the i-th edge t와 u가 다음을 만족할 때,
A  ct  Pi  ei u.
Letting b i  Pi  A, we seek the solution (values of t and u) of
ct  bi  ei u.
ei  bi
t 
ei  c
and
ci  bi
u 
.
ei  c
If e i  0 , the ith edge is parallel to the direction c of the ray,
there is no intersecti on.
교차점은 u가 interval 0,1 사이로 떨어질 때 i번째 edge가
존재해야한다.
IVIS Lab, Changwon National University
• Hit list
– P의 edge들과 ray가 진짜 hit하는 점들의 리스트.
initialize hitList to empty
for(int i  0; i  N; i  ) //for each edge of P
{
build bi, ei for the i - th edge
solve for t, u
if (u lies in [0,1] )
add t to the hitList
}
IVIS Lab, Changwon National University
• The Ray Intersection Problem
– Where does the ray first hit P?
– finding the smallest value of t, in hitList
Call this value t min .
Then the hit spot is, as always, A  ct min .
• The line-clipping problem
– 만약 ray가 P안에 있다면 t-intervals의 sequence 필요.
– 처음에 교차 하는 점, 두 번째 교차하는 점을 한 쌍, 다음 교차하
는점 과 그 다음 교차하는점을 한쌍으로 …계속 반복.
IVIS Lab, Changwon National University
P3
P4
P2
P is given by the list of vertices
(3,2),(2,0),(6,-1),(6,2),(4,1)
At the following sorted hit list :
{0.2308 ,0.375 ,0.6 ,0.7142}
P{0,4,3,2}
IVIS Lab, Changwon National University
Edge
u
t
0
0.3846
0.2308
1
-0.727
-0.2727
2
0.9048
0.7142
3
0.4
0.6
4
0.375
0.375
Thanks