Analitikus geometria - Számítógépes Grafika Csoport

Download Report

Transcript Analitikus geometria - Számítógépes Grafika Csoport

Analitikus geometria
gyorstalpaló
Szirmay-Kalos László
Geometriák

Geometria
– Axiómák


• Két pont meghatároz egy egyenest.
• Egy egyenesnek van legalább két pontja.
• Ha a egy egyenes, A pedig egy, nem az
egyenesen lévő pont, akkor egyetlen olyan
egyenes létezik, amely átmegy A-n és nem
metszi a-t.
Alapigazság (tapasztalat)
Alapfogalmak implicit definíciója
– Definíciók és tételek
– Célok és eszközök

Fontos geometriák a számítógépes grafikában
–
–
–
–
Euklideszi (sík/tér, metrikus)
Projektív
Fraktális
…
Mindent számmal:
analitikus geometria
axiómák
pont
sík
egyenes
• Két pont meghatároz egy egyenest.
• Egy egyenesnek van legalább két pontja.
• Ha a egy egyenes, A pedig egy, nem az
egyenesen lévő pont, akkor egyetlen olyan
egyenes létezik, amely átmegy A-n és nem
metszi a-t.
megfeleltetés
számok művelet
egyenlet
metszi
illeszkedik
geometria
függvény
algebra
Pontok definíciója
Yh
y
r
1
1
x
Decartes
f
w
1
Polár
Számokkal!
1. Koordinátarendszer (=referencia geometria)
2. Koordináták(=mérés)
Xh
Baricentrikus
Homogén
Pontok kombinálása
r3
r2
r
r1
m1






m2
m3
r4
m4
S miri
r=
S mj
r az r1, r2,… rn pontok kombinációja
Súlyok a baricentrikus koordináták
Ha a súlyok nem negatívak: konvex kombináció
Konvex kombináció a konvex burkon belül van
Egyenes (szakasz) = két pont (konvex) kombinációja
Sík (háromszög) = három pont (konvex) kombinációja
Vektor
pont
Vektor = eltolás: v
 Irány és hossz (|v|)
 Helyvektor

DE vektor ≠ pont !!!

helyvektor
origó
Vektor összeadás
v = v1 + v2 (kommutativ, asszoc.)
v1
v2
v1 = v - v2 (van inverz)

Skálázás (skalárral szorzás)
v1 = av
(disztributív)
v
av
Skalár (dot, belső) szorzat

v1
Definíció
v1v2 = |v1||v2|cos

Jelentés

Tulajdonság
v2

|v1|cos
Egyik vektor vetülete a másikra * másik hossza
Nem asszociatív!!!
Kommutatív
v1v2 = v2v1
Disztributív az összeadással
v3(v2+v1) = v3v2 + v3v1
v2
v1

v3
|v1|cos
vv = |v|2
Két vektor merőleges ha a skalárszorzatuk zérus
Vektor (kereszt) szorzat

Definíció
v1  v2
|v1  v2| = |v1||v2|sin
Merőleges, jobb kéz szabály


v2
 v1
Jelentés
Terület és merőleges vektor,
(Egyik vektor vetülete a másikra merőleges síkra + 90 fokos
elforgatás) * másik hossza
v1 v2
Tulajdonságok
Nem asszociatív!!!
Antiszimmetrikus
v1  v2 = - v2  v1
Disztributív az összeadással
v3  (v2+v1) = v3  v2 + v3  v1

|v1|sin
90 fok
v1v2
Két vektor párhuzamos ha vektorszorzatuk zérus.
Descartes koordináta rendszer


Egyértelmű (x = vi, y = vj)
Operációk koordinátákban
Összeadás:
v1 + v2 = (x1+x2)i + (y1+y2)j
v = xi + yj
yj
j
origó i
xi
Skalár szorzat:
v1  v2 = (x1i + y1 j)  (x2i + y2 j) = (x1 x2 + y1y2)
Vektor szorzat:
v1  v2 = (x1i + y1 j + z1k)  (x2i + y2 j + z2k) =
(y1z2 – y2z1) i + (x2z1 – x1z2) j + (x1y2 – y1x2)k
Hossz:
|v| =  vv =  x2 + y2 + z2
i j k
x1 y1 z1
x2 y2 z2
Vektor és pont különböző!

2D: Vector (x, y)
3D: Vector (x, y, z)

Műveletek:

Vector + Vector = Vector
Vector – Vector = Vector
Vector  Vector = Vector
Vector  Vector = Scalar
Vector * Scalar = Vector
|Vector| = Scalar
Point (x, y)
Point (x, y, z)
Point + Vector = Point (translation)
Point – Point = Vector
Point = Combination of Points
Distance(Point, Point) = |Point– Point|
= Scalar
struct float3 {
float x, y, z;
Vector/Point class
float3(float x0, float y0, float z0) { x=x0; y=y0; z=z0; }
float3 operator*(float a) {
return float3(x * a, y * a, z *
}
float3 operator+(const float3& v) {
return float3(x + v.x, y + v.y,
}
float3 operator-(const float3& v) {
return float3(x - v.x, y - v.y,
}
float Length() { return sqrtf(x * x
a);
z + v.z);
z - v.z);
+ y * y + z * z); }
};
float dot(const float3& v1, const float3& v2) {
return (v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);
}
float3 cross(const float3& v1, const float3& v2) {
return float3(v1.y * v2.z - v1.z * v2.y,
v1.z * v2.x – v1.x * v2.z,
v1.x * v2.y – v1.y * v2.x);
}
Egyenes (szakasz) mint két
pont kombinációja
(x2,y2)
(x(t),y(t))
(x1,y1)
fizikából
v
m2=t
y
x
m1=1-t
x(t)=x1(1-t)+ x2t
y(t)=y1(1-t)+ y2t
S miri
r=
S mj
Paraméteres egyenlet
r(t) = r0 + v t, t[-∞,∞]
x(t) = x1 + vx t
y(t) = y1 + vy t
2D egyenes
n normál vektor
v irány vektor
y
r0
r
Implicit egyenlet
n(r – r0) = 0
nx (x – x0) + ny (y – y0) = 0
ax + by + c = 0
(x, y, 1)  (a, b, c) = 0
x
2D egyenestől mért távolság:
n normál vektor r
r0
n(r – r0) = Vetület n-re * az n hossza
Ha n egységvektor:
n(r – r0) az előjeles távolság!
Sík
n normál vektor
z
n(r – r0) = 0
r0
r
nx (x–x0) + ny (y–y0) + nz (z–z0) = 0
ax + by + cz + d = 0
(x, y, z, 1)  (a, b, c, d) = 0
y
x
Ha n egységvektor:
n(r – r0) a síktól mért távolság!
Kör a síkon
Implicit egyenlet:
Azon r(x, y) pontok mértani helye, amelyek a c(cx, cy) középponttól R
távolságra vannak:
|r – c| = R  (r – c)2 = R2
 (x – cx)2 + (y – cy)2 = R2
Paraméteres egyenlet:
Asin(f) és cos(f) definíciója:
f
x(f) = cx + R cos(f)
y(f) = cy + R sin(f)
Gyakorlatok

2D:
– A parabola implicit egyenete (azon pontok mértani helye,
amelyek egyenlő távolságban vannak a p ponttól és az (r0, n)
egyenestől),
– Az ellipszis (a p1, p2 pontoktól mért távolságösszeg = C)
– Koordinátatengelyekkel párhuzamos tengelyű ellipszis
paraméteres egyenlete

3D
– Gömb, henger és paraboloid implicit egyenlete
– Két kitérő egyenes távolsága: (r1, v1) és (r2, v2)
– Azon pontok halmaza, amelyek p1, p2 pontoktól mért
távolságnégyzet összege = C.