feladat: 3d-s test leképezése

Adott az alábbi feladat:

1. Van egy ponthalmaz ami leír egy testet 3 dimenzióban.
2. Burkoló felület megtalálása
3. Felület egyenletének meghatározása
4. Felületet burkoló téglatest meghatározása
5. Téglatest felosztása elemi téglatestekre
6. Test rasztertestének elkészítése. Azaz minden elemi téglatestre meghatározni hogy a testet tartalmazza e (több mint 50%-a benne van).
7. Test és a rasztertest megjelenítése

ebből a 2. még oké, szomszédos pontokat összekötöm, és kapok egy poligon-okból álló felületet, legalábbis remélem. A 3. nagyon feladja a leckét, gondolom valami diff. egyenletet kéne rá felirni, de azt sem tudom hogy induljak el, meg miből?
A 4. és az 5. is egyszerűnek tűnik. 6. Na ez megint gázos, gondolom a 3. pontban elkészített diff. egyenletet kéne használni hozzá. 7. Na ezt is megoldom valahogy.

Bármilyen segítség jól jönne.

Hozzászólások

3. A felulet egyenlete miert kell? Arra tobb megoldas is lesz, ami atmegy az ismert pontokon.
Milyen formaban kell a fuggveny?
explicit parameteres: (x,y,z) = f(u,v) vagy
implicit f(x,y,z) = 0
4. Burkolo teglatestbol is tobb letezik, de azt talan konnyebb megtalalni. Mivel viszonylag keves parametere van egy teglatestnek
pl. vektor az egyik sarokig + 3 egymasra meroleges vektor ami az eleket jelzi : 3 + 3*2 = 9 fuggetlen parameter
varialni kell oket, es a legkisebb terfogatra lehet peldaul optimalizalni (vagy mas tetszoleges tulajdonsagra)

Talán segítek egy kicsit. Első olvasatra nekem sem ment, csak másodikra.
Bontsuk vissza az egészet matematikai alapműveletekre. Lehet tévedek, de ezek érettségis feladatok is voltak, csak nem ebben a megfogalmazásban.

1- pontok a térben, xyz
2- ez vacak kicsit, de a pont legközelebbi szomszédra mutat? legkisebb v legnagyobb felületet kell megfogni vagy a térfogata az érdekes? Ezt nem tudnám. Konvex, konkáv? de a köv kérdésedben benne a válasz talán.
Mely pontok esnek egy síkba?
3- a sík egyenletét már fel tudod írni, mert azt ugye legalább 3 pont tökéletesen meghatározza.
...a többit nem tudom jelenleg

Nagyon-nagyon régen volt már,

3. A Bezier és a B-spline nem erre való?
6. A második 2. pontaban lévő poligonok vagy 3. előállt felütet kell metszein az egység kockák éleivel a metszés alapján eldönteni,hogy megvan vagy nincs az 50%.

Egyelőre pont annyit tudok amit leírtam elvileg ma pontosítunk, ha megtudok még valamit, akkor leírom.

Megvolt a pontosítás:
1. Tulajdonképpen rám van bízva, hogy milyen inputot használok itt, bármilyen cad programból / modellező programból jöhet, csak a végeredmény legyen jó. Első körben valami polygon test-et leíró szöveges fájlformátum lesz, az egyszerűség kedvéért.
2. Ez ugye így már adott.
3. Ez azért kellene, hogy a 4. és a 6. pontban felhasználjuk, ha megy e nélkül is akkor nem kell. Polygon test esetén szerintem nem kell, ha mégis, akkor ezzel majd még kell futni köröket, de nagyon remélem hogy nem.
4. Meg kell adni egy téglatestet, aminek az élei a koordinátákkal párhozamosak, és pont benne van a test. Később majd automatizálni kell, hogy a testet addig forgassuk, amíg a legkisebb téglatestet kapjuk, de ez most nem feladat.

Így már nagyjából világos számomra hogy mit kell csinálni, el tudok indulni. A Segítséget, tanácsokat köszönöm.

A pontosítás alapján inkább 3D-s (OpenGL-s) mint matematikai a feladat, ehhez pár segítség:

1-s: ez nem csak ponthalmaz. Pontok, és kapcsolódási sorrendek. A testhez kell, hogy melyik pont mivel van kapcsolatban. Igazából ha "test" kellene, tudnod kellene még, hogy a ponttól merre van az anyag, de ez egy belső koordinátával kezelhető, illetve a megjelenítéshez nem kell.
OpenGL-nek is kellenek a pontok, és a kapcsolódási sorrend.
(de egy dolog még kell a megjelenítéshez: a normális)

2-es: hát azért erre is többféle megoldásod van.
- Nagyon egyszerű megoldás lenne, ha a pontokat egyenessel kötöd össze. Ez lenne egy ugye egy flat shading.
- Ugyan semmit nem mondtál, de feltételezem, hogy jó lenne, ha a felület első rendben folytonos lenne, de inkább másodrendben is. Ennek megfelelően a pontokat valamilyen görbével kellene összekötnöd: Bezier, B-Spline, Hermit, NURBS, polinomiális. Van választék :)
Kiindulás: http://hu.wikipedia.org/wiki/G%C3%B6rbeilleszt%C3%A9s_%28matematika%29, http://hu.wikipedia.org/wiki/Spline

3-as: ugrás. A 2-s pontból egy fontos adat kell: a pontokban a felületi normális koordinátája. Ez kell a megjelenítéshez.
Lehet tovább pontosítani, mondjuk egy uv-mappot generálsz belőle, de szerintem 0. lépésben a normális neked elég (és az opengl-nek is)

4-es: Ez 3 projekció a tengelyek mentén, majd min/max elem keresése. x tengely mentén síkba vetíted a pontokat, akkor (y, z) síkban megkapod a vetületet. Itt megkeresed azt a pontot, aminek a legkisebb az y, z, majd amelyiknek a legnagyobb az y, a z koordinátája, és meg is van a téglatest (y, z) síkbeli lapjának a mérete. Pontod van, egyenes irányvektorát ismered, innen a metszéspontokat meg tudod határozni.

5, 6-os pont: voxel modell-t kell építened? Ez egyszerű, csak nagyon számítás igényes. "opengl collision detection" tud segíteni, de ez nem jó az 50% -ra, csak a kívül vagy belül vanra. Az 50% amúgy is érdekes, mivel csak a közelítő felületeted lesz ismert, ezért ezt is csak közelítve tudod meghatározni. Ehhez mondjuk jól jöhet a felület egyenlete, hogy az elemi kockák éleivel a metszés meghatározása könnyű legyen.
Ha meg alkalmazhatsz egyszerüsítéseket, akkor síkok (pontok közti testet egyenessel közelíted) és az elemi kockák éleinek döféspontjával kalkulálhatod.

7-es: Na ez a legjobb, ha megvannak a pontok, a sorrend, és a felületi normális, akkor a test lényegileg kész. Ezen adatokat feltöltöd az opengl-nek, raksz rá egy Lambertian shadinget (http://www.davidcornette.com/glsl/glsl.html) és kész. A voxel modell -t meg egy flat shadingel megjeleníted.

Ha felület egyenletét kell meghatározni, ahhoz előbb kéne néhány szelvény egyenlete, ha jól tudom. Ebben tudok segíteni. Rég volt ugyan, de még megvan minden..

A felület egyenletéhez egy kegyetlen polinom kell de kérdés, hogy a már meglévő ponthalmazt milyen mértékben kell interpolálni. (parciális interpoláció, aszem erre is van valamim)

Különben ez valami 3D marógép működtetéséhez kell?
Mert akkor haladhatsz vele szelvényenként. Mondjuk ha bizonyos térközönként megvan az összes bezier görbének számhalmaza, csodálatos postscript kimenet alakítható belőle parancssorban, azt már megeszi mindegyik cnc marógép

---------
ha van egy ilyen ponthalmazod (file.txt):

0 376
24.3333 374.667
46.6667 372.333
67 369
86 364.667
103 359.667
105 359
107 358.333
111 356.667
118.333 353.667
132 347
138.333 343.333
144.333 339.667
149.667 335.667
154.667 331.333
159.667 327
164 322.667
171.333 313
174.667 308
177.333 302.667
182 292
185.333 280.333
187.333 268.333
188 256
177.333 219.333
166.667 185.333
161 169.333
154.333 154
147 139
142.667 131.667
138.333 124.667
133.333 118
131 114.333
130.333 113.667
130 113.333
129.667 112.667
129 112
128.667 111.333
128.333 111
122.667 104.333
119.667 101.333
118 99.6667
117.667 99.3333
117.333 98.6667
116.667 98
110 91.6667
103 85.3333
95.6667 79.3333
87.6667 73.3333
79 67.6667
69.6667 62
60 56.6667
49.3333 51.3333
38 46
26.3333 40.6667
0 31
-26.3333 40.6667
-38 46
-49.3333 51.3333
-60 56.6667
-69.6667 62
-79 67.6667
-87.6667 73.3333
-95.6667 79.3333
-103 85.3333
-110 91.6667
-116.667 98
-117.333 98.6667
-117.667 99.3333
-118 99.6667
-119.667 101.333
-122.667 104.333
-128.333 111
-128.667 111.333
-129 112
-129.667 112.667
-130 113.333
-130.333 113.667
-131 114.333
-133.333 118
-138.333 124.667
-142.667 131.667
-147 139
-154.333 154
-161 169.333
-166.667 185.333
-177.333 219.333
-188 256
-187.333 268.333
-185.333 280.333
-182 292
-177.333 302.667
-174.667 308
-171.333 313
-164 322.667
-159.667 327
-154.667 331.333
-149.667 335.667
-144.333 339.667
-138.333 343.333
-132 347
-118.333 353.667
-111 356.667
-107 358.333
-105 359
-103 359.667
-86 364.667
-67 369
-46.6667 372.333
-24.3333 374.667
0 376

akkor egy ilyen script begörbézi a dolgot, jelen esetben png (és ltex) kimenettel:

#! /usr/bin/gnuplot

set terminal latex
set output "kimenet.tex"
set zeroaxis
set xlabel "x"
#set ylabel "y"
set nokey
p "file.txt" u 1:2 t "file.txt" smooth bezier
#################
set term png # vagy set term pngcairo, ha van
set output "file.png"
replot
set output
#################
exit 0

Ha az interpolált értékek számokban kellenek, akkor egy régi gépemen kell körbenéznem..

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Én anno bc-ben oldottam meg. Minek atomerőmű egy interpoláláshoz? A gnuplot felülmúlja Paksot, a bc meg éppenhogy a Bécs alatti duzzasztómű turbinájának szintjén áll...
:)

Kipróbálom mindenesetre a gnuplottal amit írtál

---
--- A gond akkor van, ha látszólag minden működik. ---
---