1 / 15

Analitikus (koordin áta) geometriai gyorstalpaló

Analitikus (koordin áta) geometriai gyorstalpaló. Szirmay-Kalos László. Geometriák. Geometriák Axiómák Igaz állítások alapfogalmak implicit definíciója Definíciók + tételek Célok és eszközrendszer Számítógépes grafikában fontos geometriák Euklideszi (sík/tér, metrikus, analitikus)

Download Presentation

Analitikus (koordin áta) geometriai gyorstalpaló

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Analitikus (koordináta) geometriai gyorstalpaló Szirmay-Kalos László

  2. Geometriák • Geometriák • Axiómák • Igaz állítások • alapfogalmak implicit definíciója • Definíciók + tételek • Célok és eszközrendszer • Számítógépes grafikában fontos geometriák • Euklideszi (sík/tér, metrikus, analitikus) • Projektív (tér, analitikus) • Differenciál geometria • Fraktál geometria • Diszkrét geometria

  3. Mindent számmal: analitikus geometria axiómák pont számok sík műveletek megfeleltetés egyenes egyenlet illeszkedik metszi függvény geometria algebra

  4. Pontok, alakzatok megadása • Mindent számmal! • Koordináta rendszer • Koordináták megadása • Koordináta rendszerek • Descartes • Polár • Homogén

  5. Koordináta rendszerek Yh 1 y 1 r f w Xh x Descartes Polár Baricentrikus Homogén

  6. Pontfüggvények: Mozgatás pont • Vektor = eltolás: v • Iránya és hossza (|v|) van • Helyvektor • De vektor ≠ pont !!! • Vektorműveletek • v = v1+v2(kommutatív, asszoc) • v1 = v - v2(összeadásnak van inverze) • v1 = av(összeadásra disztributív) helyvektor origó v1 • v2 v av

  7. Skaláris szorzás v1 v2 • Definíció • v1v2 = |v1||v2|cos • Jelentés • Egyik vektor vetülete a másikra * másik hossza • Tulajdonságok • Kommutatív v1v2 = v2v1 • Összeadással disztributív v3(v2+v1) = v3v2 + v3v1 • vv = |v|2  |v1|cos v2 v1  v3 |v1|cos

  8. Vektoriális szorzás v1v2 v2 • Definíció • |v1v2|= |v1||v2|sin • Merőleges, jobbkéz szabály • Jelentés • Paralelogramma területe, síkjára merőleges • (Egyik vektor vetülete a másikra merőleges síkra + 90 fokos forgatás) * másik hossza • Tulajdonságok • Alternáló v1  v2 = - v2  v1 • Összeadással disztributív v3 (v2+v1) = v3  v2 + v3  v1 v1  v2 v1  |v1|sin 90 fok v1v2

  9. Descartes koordinátarendszer v= xi + yj y j • Egyértelmű (x = vi,y = vj) • Műveletek koordinátákban Összeadás: v1+v2 = (x1+x2)i + (y1+y2)j Skaláris szorzás: v1v2 = (x1i + y1j) (x2i + y2j) = (x1 x2+ y1y2) Vektoriális szorzás: v1v2 = (x1i + y1j + z1k)(x2i + y2j + z2k) = (y1z2 – y2z1) i+(x2z1– x1z2) j+(x1y2 – y1x2)k Abszolút érték: |v|=  vv=  x2 +y2 +z2 j x i i origó ij k x1y1z1 x2 y2 z2

  10. Vektor és Pont nem ugyanaz! • 2D: vektor (x, y) Pont (x, y) • 3D: vektor (x, y, z) Pont (x, y, z) • Műveletek: Vektor + Vektor = Vektor Pont + Vektor = Pont (eltolás) Vektor – Vektor = Vektor Pont – Pont = Vektor Vektor  Vektor = Vektor Vektor  Vektor = Skalár Vektor * Skalár = Vektor

  11. Vektor és Ponttényleg nem ugyanaz! • 2D: vektor (x, y, 0) Pont (x, y, 1) • 3D: vektor (x, y, z, 0) Pont (x, y, z, 1) • Műveletek: Vektor + Vektor = Vektor Pont + Vektor = Pont (eltolás) Vektor – Vektor = Vektor Pont – Pont = Vektor Vektor  Vektor = Skalár Vektor * Skalár = Vektor

  12. struct Vector { float x, y, z, w; Vector(float x0, float y0, float z0, float w0 = 0) { x = x0; y = y0; z = z0; w = w0; } Vector operator*(floata) { return Vector(x * a, y * a, z * a, w * a); } Vector operator+(Vector& v) { return Vector(x+ v.x, y + v.y, z + v.z, w + v.w); } Vector operator-(Vector& v) { return Vector(x- v.x, y - v.y, z - v.z, w - v.w); } float operator*(Vector& v) { return (x*v.x + y*v.y + z*v.z); } Vector operator%(Vector& v) { return Vector(y*v.z-z*v.y, z*v.x - x*v.z, x*v.y-y*v.x); } float Length() { return sqrt(x * x + y * y + z * z); } }; Vektor osztály

  13. //-------------------------------------------- class CVector { //-------------------------------------------- float x, y, z, w; public: CVector( ) { x = y = z = w = 0.0; } CVector( float x0, float y0, float z0, float w0 = 1.0 ) { x = x0; y = y0; z = z0; w = w0; } float operator*( const Vector& v ) { return (x * v.x + y * v.y + z * v.z); } CVector operator+( const CVector& v ) { __declspec(align(16)) CVector result; #ifdef SIMD __asm { mov esi, this mov edi, v movups xmm0, [esi] movups xmm1, [edi] addps xmm0, xmm1 movaps result, xmm0 } #else result.x = x + v.x; result.y = y + v.y; result.z = z + v.z; result.w = w + v.w; #endif return result; } CVector operator*( float f ) { Vector result( x * f, y * f, z * f ); return result; } void operator+=( const CVector& v ) { #ifdef SIMD __asm { mov esi, this mov edi, v movups xmm0, [esi] movups xmm1, [edi] addps xmm0, xmm1 movups [esi], xmm0 } #else x += v.x; y += v.y; z += v.z; #endif } void operator*=( float f ) { x *= f; y *= f; z *= f; } CVector operator-( const CVector& v ) { Vector result; #ifdef SIMD __asm { mov esi, this mov edi, v movups xmm0, [esi] movups xmm1, [edi] subps xmm0, xmm1 movaps result, xmm0 } #else result.x = x - v.x; result.y = y - v.y; result.z = z - v.z; #endif return result; } CVector operator/( float f ) { Vector result( x/f, y/f, z/f ); return result; } CVector operator%( const CVector& v ){ Vector result; #ifdef SIMD __asm { mov esi, this mov edi, v movups xmm0, [esi] movups xmm1, [edi] movaps xmm2, xmm0 movaps xmm3, xmm1 shufps xmm0, xmm0, 0xc9 shufps xmm1, xmm1, 0xd2 mulps xmm0, xmm1 shufps xmm2, xmm2, 0xd2 shufps xmm3, xmm3, 0xc9 mulps xmm2, xmm3 subps xmm0, xmm2 movaps result, xmm0 } #else result.x = y * v.z - z * v.y; result.y = z * v.x - x * v.z; result.z = x * v.y - y * v.x; #endif return result; } float Length( ) { return (float)sqrt( x * x + y * y + z * z ); } void Normalize( ) { float l = Length( ); if ( l < 0.000001f) { x = 1; y = 0; z = 0; } else { x /= l; y /= l; z /= l; } } CVector UnitVector( ) { Vector r = * this; r.Normalize(); return r; } float * GetArray() { return &x; } float& X() { return x; } float& Y() { return y; } float& Z() { return z; } friend class Matrix; }; SSE (3DNow!) struct Vector { float x, y, z, w; public: Vector operator+( Vector& v ) { __declspec(align(16)) Vector res; __asm { mov esi, this mov edi, v movups xmm0, [esi] ; unaligned movups xmm1, [edi] addps xmm0, xmm1 movaps res, xmm0 ; aligned } return res; } };

  14. 2D egyenes nnormálvektor virányvektor n(r – r0) = 0 nx (x – x0) + ny (y – y0) = 0 ax + by + c = 0 (x, y, 1)  (a, b, c) = 0 y r0 r x • r = r0 + vt, t  [-∞,∞] • x = x0 + vxt • y = y0 + vyt

  15. Sík nnormálvektor z r0 r y x n(r – r0) = 0 nx (x – x0) + ny (y – y0) + nz(z – z0) = 0 ax + by + cz + d = 0 (x, y, z, 1)  (a, b, c, d) = 0

More Related