Farkas Gyula Szakkollégium Bit- és számtologatók. Parametrikus görbék és felületek ábrázolása március 8., 22. Róth Ágoston

Hasonló dokumentumok
VIK A2 Matematika - BOSCH, Hatvan, 3. Gyakorlati anyag. Mátrix rangja

9. Írjuk fel annak a síknak az egyenletét, amely átmegy az M 0(1, 2, 3) ponton és. egyenessel;

Matematika III előadás

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

Matematika (mesterképzés)

2014/2015. tavaszi félév

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Síkbeli egyenesek. 2. Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

Koordinátarendszerek

Számítógépes geometria (mester kurzus) III

Feladatok a Gazdasági matematika II. tárgy gyakorlataihoz

Koordináta-geometria II.

Gyakorló feladatok I.

BME MOGI Gépészeti informatika 15.

Lin.Alg.Zh.1 feladatok

Programozás II gyakorlat. 8. Operátor túlterhelés

9. előadás. Térbeli koordinátageometria

VIK A3 Matematika, Gyakorlati anyag 2.

= Y y 0. = Z z 0. u 1. = Z z 1 z 2 z 1. = Y y 1 y 2 y 1

BME MOGI Gépészeti informatika 7.

(a b)(c d)(e f) = (a b)[(c d) (e f)] = = (a b)[e(cdf) f(cde)] = (abe)(cdf) (abf)(cde)

Síkbeli egyenesek Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

Az egyenes és a sík analitikus geometriája

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

8. előadás. Kúpszeletek

1. feladatsor: Vektorfüggvények deriválása (megoldás)

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

3D koordináta-rendszerek

Számítógépes geometria

Számítógépes Grafika mintafeladatok

Összeállította: dr. Leitold Adrien egyetemi docens

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

ANALÍZIS II. Példatár

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

Tartalom. Descartes-koordináták. Geometriai értelmezés. Pont. Egyenes. Klár Gergely 2010/2011. tavaszi félév

Geometriai modellezés. Szécsi László

I. feladatsor. 9x x x 2 6x x 9x. 12x 9x2 3. 9x 2 + x. x(x + 3) 50 (d) f(x) = 8x + 4 x(x 2 25)

Összeállította: dr. Leitold Adrien egyetemi docens

Matematika II. 1 sin xdx =, 1 cos xdx =, 1 + x 2 dx =

Az egyenlőtlenség mindkét oldalát szorozzuk meg 4 16-al:

Tehetetlenségi nyomatékok

Integrálszámítás (Gyakorló feladatok)

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

0, különben. 9. Függvények

5 1 6 (2x3 + 4) 7. 4 ( ctg(4x + 2)) + c = 3 4 ctg(4x + 2) + c ] 12 (2x6 + 9) 20 ln(5x4 + 17) + c ch(8x) 20 ln 5x c = 11

Írja át a következő komplex számokat trigonometrikus alakba: 1+i, 2i, -1-i, -2, 3 Végezze el a műveletet: = 2. gyakorlat Sajátérték - sajátvektor 13 6

Analízis III. gyakorlat október

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög.

Koordináta-geometria feladatok (emelt szint)

sin x = cos x =? sin x = dx =? dx = cos x =? g) Adja meg a helyettesítéses integrálás szabályát határozott integrálokra vonatkozóan!

Lin.Alg.Zh.1 feladatok

45 különbözô egyenest kapunk, ha q! R\{-35}. b) $ =- 1& = 0, nem felel meg a feladat feltételeinek.

Kiindulás 01. Ábrázoló geometria "testépítés" transzformáció segítségével. n 2 " x 1,2. n 1 '

Virtuális függvények (late binding)

Lengyelné Dr. Szilágyi Szilvia április 7.

HÁZI FELADATOK. 1. félév. 1. konferencia A lineáris algebra alapjai

1. Oldja meg a z 3 (5 + 3j) (8 + 2j) 2. Adottak az A(1,4,3), B(3,1, 1), C( 5,2,4) pontok a térben.

Hajder Levente 2017/2018. II. félév

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Matematika II képletek. 1 sin xdx =, cos 2 x dx = sh 2 x dx = 1 + x 2 dx = 1 x. cos xdx =,

Vektorterek. =a gyakorlatokon megoldásra ajánlott

Hajder Levente 2018/2019. II. félév

Egyenletek, egyenlőtlenségek V.

Számítási feladatok a Számítógépi geometria órához

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

Hajder Levente 2014/2015. tavaszi félév

Az Országos Középiskolai Tanulmányi Verseny tanévi első fordulójának feladatmegoldásai

Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály, középszint

Megoldások. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

VIK A1 Matematika BOSCH, Hatvan, 5. Gyakorlati anyag

117. AA Megoldó Alfréd AA 117.

500. CC Megoldó Alfréd CC 500.

C++ programozási nyelv Konstruktorok-destruktorok

Vektorok és koordinátageometria

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások. alapfüggvény (ábrán: fekete)

5. házi feladat. AB, CD kitér élpárra történ tükrözések: Az ered transzformáció: mivel az origó xpont, így nincs szükség homogénkoordinátás

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Elemi Alkalmazások Fejlesztése II.

1. Transzformációk mátrixa

MINTAFELADATOK. 1. feladat: Két síkidom metszése I.33.,I.34.

Az axonometrikus ábrázolás analitikus geometriai egyenleteinek másfajta levezetése. Bevezetés

Fizika 1i, 2018 őszi félév, 1. gyakorlat

NULLADIK MATEMATIKA ZÁRTHELYI

Vektorok összeadása, kivonása, szorzás számmal, koordináták

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

5. gyakorlat. Lineáris leképezések. Tekintsük azt a valós függvényt, amely minden számhoz hozzárendeli az ötszörösét!

Klár Gergely 2010/2011. tavaszi félév

Lineáris leképezések. Wettl Ferenc március 9. Wettl Ferenc Lineáris leképezések március 9. 1 / 31

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Matematika szigorlat, Mérnök informatikus szak I máj. 29.

A kör. A kör egyenlete

Descartes-féle, derékszögű koordináta-rendszer

1.1. Gyökök és hatványozás Hatványozás Gyökök Azonosságok Egyenlőtlenségek... 3

Megjegyzés: jelenti. akkor létezik az. ekkor

LINEÁRIS ALGEBRA. matematika alapszak. Euklideszi terek. SZTE Bolyai Intézet, őszi félév. Euklideszi terek LINEÁRIS ALGEBRA 1 / 40

Budapesti Műszaki és Gazdaságtudományi Egyetem Matematika Intézet. A Bevezető matematika tárgy gyakorlati anyaga

Feladatsor A differenciálgeometria alapja c. kurzus gyakorlatához

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Transzformáció a főtengelyekre és a nem főtengelyekre vonatkoztatott. Az ellipszis a sík azon pontjainak mértani helye, amelyeknek két adott pontól

Koordinátageometriai gyakorló feladatok I ( vektorok )

Átírás:

Farkas Gyula Szakkollégium Bit- és számtologatók Parametrikus görbék és felületek ábrázolása 2006. március 8. 22. Róth Ágoston

vectors2d.h class CSquare2D; // később jelenik meg a leírása class CMesh2D; // később jelenik meg a leírása class CVector2D friend CSquare2D; friend CMesh2D; friend CVector2D operator * (const CVector2D &v float lambda); friend CVector2D operator * (float lambda const CVector2D &v); private: float x y; public: CVector2D(float x0.0ffloat y0.0f); // módosító metódusok setx(float x); sety(float y); updateall(float x float y); // néhány operátor túlterhelése CVector2D operator + (const CVector2D &v); CVector2D& operator + (const CVector2D &v); CVector2D operator - (const CVector2D &v); CVector2D& operator - (const CVector2D &v); float operator * (const CVector2D& v); CVector2D& operator * (float lambda); // vektort skáláz scale(float lambdax float lambday); // vektort egységnyi hosszúságúra alakít normalize(); ; // lekérdező metódusok float getx() const; float gety() const; float norm() const;

vectors3d.h class CSquare3D; // később jelenik meg a leírása class CMesh3D; // később jelenik meg a leírása class CVector3D friend CSquare3D; friend CMesh3D; friend CVector3D operator * (const CVector3D &v float lambda); friend CVector3D operator * (float lambda const CVector3D &v); private: float x y z; public: CVector3D(float x0.0f float y0.0f float z0.0f); setx(float x); sety(float y); setz(float z); updateall(float x float y float z); CVector3D operator + (const CVector3D &v); CVector3D& operator + (const CVector3D &v); CVector3D operator - (const CVector3D &v); float operator * (const CVector3D &v1 const CVector3D &v2); CVector3D& operator * (float lambda); CVector3D& operator - (const CVector3D &v); CVector3D operator % (const CVector3D &v); // vektoriális szorzat CVector3D& operator % (const CVector3D &v); // vektoriális szorzat float float float float scale(float lambdax float lambday float lambdaz); normalize(); getx() const; gety() const; getz() const; norm() const; ; CVector2D orthoprojection(const CVector3D &lightdir); // merőleges vetítés CVector2D perspprojection(float eyedistance); // perspektívikus vetítés rotateleft(float alfa); // forgatási transzformáció rotateright(float alfa); // forgatási transzformáció bool rotateup(float alfa); // forgatási transzformáció bool rotatedown(float alfa); // forgatási transzformáció

Nézőpont megváltoztatása + c c b a b b a a ϕ ϕ ϕ ϕ cos sin sin cos + α α α α α α sin cos sin cos sin cos r c c r c b b r c a a Balra Jobbra: ϕ ϕ Felfelé Lefelé: α α

Merőleges vetítés Egységnyi vetítő vektor mely merőleges az Origón átmenő képsíkra r 3 p( a b c) R 2 2 2 p r a + b + c 1 a 2 + b 2 0 az összes többi fénysugár párhuzamos p r -vel képsíkbeli koordináták: 3 ( x y z) R M bx + ay u 2 2 a + b c v a 2 2 ( ax + by) + ( a + b ) 2 + b 2 képsíktól való távolság: m ax + by + cz z r p OM

Perspektívikus vetítés képsík: xoy Oz megfigyelő: tengelyen szemtávolság: d képsíkbeli koordináták: 3 ( x y z) R M xz x d z yz y d z képsíktól való távolság: z

Parametrikus felületek. Négyszögű háló [ ] [ ] 3 : R d c b a F ( ) ( ) ( ) ( ) ( ) ( ) [ ] [ ] d c b a uv v u fz v u fy v u fx v u F n c d dv m a b du m k du k a u k... 01 + n l dv l c v l... 01 + ( ) ( ) ( ) ( ) [ ] 1 01... 1 01... 1 1 1 + + + n l m k v u v u v u v u l k l k l k l k ( ) ( ) ( ) ( ) [ ] 1 01... 1 01... 1 1 1 + + + n l m k v u F v u F v u F v u F l k l k l k l k felület paraméterezése: értelmezés tartomámybeli osztópontok: 2D-os rácshálót alkotó negyszögek: 3D-os rácshálót alkotó negyszögek:

2D/3D-os négyszögek

squares2d.h class CSquare3D; class CMesh2D; class CSquare2D friend CMesh2D; friend CSquare3D; private: CVector2D *corner; bool visible; bool transparent; TColor transparentcolor; public: // alapértelmezett konstruktor CSquare2D(); // másoló konstruktor CSquare2D(const CSquare2D &s); // hozzárendelő operátor CSquare2D& operator (const CSquare2D &s); //módosító metódusok updatecorner(int icorner float x float y); updatecorner(int icorner const CVector2D& v); ; //destruktor ~CSquare2D();

squares3d.h class CMesh3D; class CSquare3D friend CMesh3D; private: CVector3D *corner; CVector3D *normal; float d; bool transparent; TColor transparentcolor; public: CSquare3D(); CSquare3D(const CSquare3D &s); CSquare3D& operator (const CSquare3D &s); float CSquare2D getdistance() const; updatecorner(int icorner float x float y float z); updatecorner(int icorner const CVector3D& v); updatenormal(int icorner float x float y float z); updatenormal(int icorner const CVector3D& n); orthoprojection(const CVector3D &lightdir); ; ~CSquare3D(); //a qsort függvényhez szükséges egy összehasonlító függvény (a d alapján rendezzük a szemeket növekvő sorrendbe) int compare3dsquares(const * s1 const * s2);

mesh2d.h class CMesh3D; class CMesh2D friend CMesh3D; private: int nrmesh; CSquare2D *mesh; public: ; CMesh2D& virtual CMesh2D(int nrmesh0); CMesh2D(const CMesh2D &m2d); operator (const CMesh2D &m2d); updatecorner(int imesh int jcorner float x float y); updatecorner(int imesh int jcorner const CVector2D& v); setvisibility(int imesh bool visible); settransparency(int imesh bool transparent); Draw(TCanvas *canvas int x0 int y0 float zoom const TColor &backcolor1 const TColor &backcolor2 const TColor &frontcolor1 const TColor &frontcolor2); ~CMesh2D(); // fontos hogy virtuális legyen mert származtatni fogunk ebből az osztályból

mesh2d.cpp részlet CMesh2D::Draw(TCanvas *canvas int x0 int y0 float zoom const TColor &backcolor1 const TColor &backcolor2 const TColor &frontcolor1 const TColor &frontcolor2) int br1getrvalue(backcolor1)bg1getgvalue(backcolor1)bb1getbvalue(backcolor1) br2getrvalue(backcolor2)bg2getgvalue(backcolor2)bb2getbvalue(backcolor2) fr1getrvalue(frontcolor1)fg1getgvalue(frontcolor1)fb1getbvalue(frontcolor1) fr2getrvalue(frontcolor2)fg2getgvalue(frontcolor2)fb2getbvalue(frontcolor2); float dbr(float)(br2-br1)/(float)(nrmesh-1) dbg(float)(bg2-bg1)/(float)(nrmesh-1) dbb(float)(bb2-bb1)/(float)(nrmesh-1) dfr(float)(fr2-fr1)/(float)(nrmesh-1) dfg(float)(fg2-fg1)/(float)(nrmesh-1) dfb(float)(fb2-fb1)/(float)(nrmesh-1); TPoint *p; p new TPoint[4]; for (int i0;i<nrmesh;i++) for (int j0;j<4;j++) p[j].xfloor((float)x0+(float)zoom*mesh[i].corner[j].x); p[j].yfloor((float)y0-(float)zoom*mesh[i].corner[j].y); if (mesh[i].visible) if (mesh[i].transparent) canvas->pen->stylepsdashdot; canvas->pen->colormesh[i].transparentcolor; canvas->brush->stylebsclear; else canvas->pen->stylepssolid; canvas->pen->colorrgb(floor(fr1+i*dfr)-75floor(fg1+i*dfg)-75floor(fb1+i*dfb)-75); canvas->brush->colorrgb(floor(fr1+i*dfr)floor(fg1+i*dfg)floor(fb1+i*dfb)); canvas->polygon(p3);

mesh2d.cpp részlet (folytatás) //for else //if (!mesh[i].visible) if (mesh[i].transparent) canvas->pen->stylepsdashdot; canvas->pen->colormesh[i].transparentcolor; canvas->brush->stylebsclear; else canvas->pen->stylepssolid; canvas->pen->colorrgb(floor(i*100.0f/(nrmesh-1)) floor(i*100.0f/(nrmesh-1)) floor(i*100.0f/(nrmesh-1))); canvas->brush->colorrgb(floor(br1+i*dbr)floor(bg1+i*dbg)floor(bb1+i*dbb)); canvas->polygon(p3); delete[] p;

mesh3d.h class CMesh3D private: int nrmesh; CSquare3D *mesh; public: CMesh3D(int nrmesh0); CMesh3D(const CMesh3D &m3d); CMesh3D& operator (const CMesh3D &m3d); ; CMesh3D CMesh2D virtual operator + (const CMesh3D &m3d); updatecorner(int imesh int jcorner float x float y float z); updatecorner(int imesh int jcorner const CVector3D& v); updatenormal(int imesh int jcorner float x float y float z); updatenormal(int imesh int jcorner const CVector3D& n); maketransparent(tcolor transparentcolor); orthoprojection(const CVector3D &lightdir); ~CMesh3D(); // fontos hogy virtuális legyen mert származtatni fogunk ebből az osztályból

mesh3d.cpp részlet CMesh2D CMesh3D::orthoProjection(const CVector3D &lightdir) CMesh2D result(nrmesh); CVector3D GN; // súlypontok távolsága a képsíktól for(int i0;i<nrmesh;i++) G.updateAll(0.0f0.0f0.0f); for(int j0;j<4;j++) G+mesh[i].corner[j]; mesh[i].dg*lightdir; // szemek növekvő sorrendbe rendezése a kapott távolságértékek alapján qsort(meshnrmeshsizeof(csquare3d)compare3dsquares); // szemek vetítése for(int i0;i<nrmesh;i++) N.updateAll(0.0f0.0f0.0f); for(int j0;j<4;j++) N+mesh[i].normal[j]; result.mesh[i]mesh[i].orthoprojection(lightdir); // láthatóság eldöntése // a szemek rendezése nélkül a láthatóság eldöntése nem ad helyes eredményt if (N*lightDir>0.0f) result.setvisibility(itrue); else result.setvisibility(ifalse); // áttetszőség beállítása result.settransparency(imesh[i].transparent); return result;

parametricsurfaces.h typedef float (*fptr) (float float); class CParametricSurface3D: public CMesh3D private: float a b c d; // értelmezési tartomány fptr fx fy fz; // koordinátafüggvények int m n; // (m-1)x(n-1)-es racsháló public: ; CParametricSurface3D(float a float b float c float d fptr fx fptr fy fptr fz int m int n);

parametricsurfaces.cpp CVector3D diffu(fptr fxfptr fy fptr fz float u float v) float h1e-5; return CVector3D((fx(u+hv)-fx(uv))/h(fy(u+hv)-fy(uv))/h(fz(u+hv)-fz(uv))/h); CVector3D diffv(fptr fxfptr fy fptr fz float u float v) float h1e-5; return CVector3D((fx(uv+h)-fx(uv))/h(fy(uv+h)-fy(uv))/h(fz(uv+h)-fz(uv))/h); CParametricSurface3D::CParametricSurface3D(float a float b float c float d fptr fxfptr fyfptr fz int mint n): CMesh3D(m*n) a(a)b(b)c(c)d(d)fx(fx)fy(fy)fz(fz)m(m)n(n) float du(b-a)/m dv(d-c)/n; float u[4]v[4]; int act0; for(unsigned int i0;i<m;i++) u[0]u[3]a+i*du; u[1]u[2]u[0]+du; for(unsigned int j0;j<n;j++) v[0]v[1]c+j*dv; v[2]v[3]v[0]+dv; for(unsigned int k0;k<4;k++) updatecorner(actkfx(u[k]v[k])fy(u[k]v[k])fz(u[k]v[k])); updatenormal(actkdiffu(fxfyfzu[k]v[k])%diffv(fxfyfzu[k]v[k])); act++;

Domborzatjellegű (Euler-Monge előállítású) felületek felület paraméterezése matematikailag: z : z [ a b] [ c d] z( u v) R exe programban: float EulerMongeX(float u float v) return u; float EulerMongeY(float u float v) return v; float EulerMongeZ(float u float v) return z(uv); [-3.23.2] [- 2.42.4] ( u v) //... CVector3D lightdir(sqrt(1.0/3.0) sqrt(1.0/3.0) sqrt(1.03.0)); // egységnyi vetítősugár float abcd; // értelmezési tartomány unsigned int m30 n30; // osztópontok száma u- illetve v-irányban CParametricSurface3D EulerMonge(a b c d EulerMongeX EulerMongeY EulerMongeZ m n); CMesh2D m2deulermonge.orthoprojection(lightdir); //... m2d.draw(...); z : z u e 2 2 2 u v + v 2 + 1 R

Forgásfelületek felület paraméterezése matematikailag: F F 3 :[ a b] [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) g : [ a b] R programban: float fx(float u float v) return f(u)*cos(v); float fy(float u float v) return f(u)*sin(v); float fz(float u float v) ( f ( u fx fy rögzített ) cosv f ( urögzített ) sin v g( urögzített ) return g(u); fx u //... fy u CVector3D lightdir(sqrt(1.0/3.0) sqrt(1.0/3.0) sqrt(1.0/3.0)); // egységnyi vetítősugár float abc0.0d2*pi; // értelmezési tartomány unsigned int m30 n30; // osztópontok száma u- illetve v-irányban CParametricSurface3D Forgasfelulet(a b c d fx fy fz m n); CMesh2D m2dforgasfelulet.orthoprojection(lightdir); //... m2d.draw(...); ( ): [ 02π ] R ( rögzített v) f ( urögzített ) ( v) f ( u ) rögzített 2 rögzített cosv sin v

Sajátságos forgásfelületek Gömb F F f g 3 :[ 0 π ] [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) ( u) ( u) r sin u r cosu exe r 1

Sajátságos forgásfelületek Kúp F F f g 3 :[ c c] [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) ( u) ( u) u λ R λ u * exe c 2 λ 1

Sajátságos forgásfelületek Tórusz F F f g 3 :[ 02π ] [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) ( u) ( u) R + r sin u r cosu exe R 2 r 1

Sajátságos forgásfelületek Pszeudoszféra F F f g 3 : ( 0 π ) [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) ( u) r sin u ( u) u r ln tan + cosu 2 exe r 1

S hogy miért nem jó az egész elképzelés? Soha ne higyjetek egy hosszúhajú huligánnak! :)

Egyoldalú felületek Sajátságosan Moebius-féle szalagok felület paraméterezése matematikailag: F F f g 3 :[ 01] [ 02π ] R ( u v) ( f ( u) cosv f ( u) sin v g( u) ) ( u) R + r( 1 2u) ( u) r( 1 2u) 2k + 1 cos v 2 2k + 1 sin v 2 k - csavarások száma R 2 r 1 k 1 exe exe R 2 r 1 k 5

Nem mindig kapunk helyes takarási sorrendet próbáljuk meg ábrázolni a következő felületet különböző felbontású rácshálókat használva z : z [ 33] [ 33] sin( 10 u v) R m n 10 m n 20 m n 40 m n 200

Az előbbi felület OpenGL alatt

Mire jó az operator + a CMesh3D osztályban? float planexoyx(float u float v) return u; float Torus2x(float u float v) return 5.0f+(3.0f+1.0f*sin(u))*cos(v); float planexoyy(float u float v) return v; float planexoyz(float u float v) return 0.0f; float Torus2y(float u float v) return 1.0f*cos(u); float Torus2z(float u float v) return (3.0f+1.0f*sin(u))*sin(v); float Torus1x(float u float v) return (5+2*sin(u))*cos(v); float Torus1y(float u float v) return (5+2*sin(u))*sin(v); float Torus1z(float u float v) return -2*cos(u); float Torus3x(float u float v) return 1.0f*cos(u); float Torus3y(float u float v) return 5.0f+(3.0f+1.0f*sin(u))*cos(v); float Torus3z(float u float v) return (3.0f+1.0f*sin(u))*sin(v);

Mire jó az operator + a CMesh3D osztályban? (folytatás) CParametricSurface3D planexoy(-11.0f11.0f-11.0f11.0fplanexoyxplanexoyyplanexoyz1010); CParametricSurface3D Torus1(0.0f2.0f*pi0.0f2.0f*piTorus1xTorus1yTorus1z3030); CParametricSurface3D Torus2(0.0f2.0f*pi0.0f2.0f*piTorus2xTorus2yTorus2z2020); CParametricSurface3D Torus3(0.0f2.0f*pi0.0f2.0f*piTorus3xTorus3yTorus3z88); planexoy.maketransparent(clgray); //... CVector3D CMesh3D CMesh2D lightdir( sqrt(1.0/3.0) sqrt(1.0/3.0) sqrt(1.0/3.0)); m3dplanexoy+torus1+torus2+torus3; m2dm3d.orthoprojection(lightdir); //... m2d.draw(...);