[alg] wiskundig vraagje (3d perspective tekenen)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik werk momenteel aan een eenvoudige 3d-engine in Actionscript. Een afbeelding ter inleiding:
Afbeeldingslocatie: http://i40.tinypic.com/2ceq9g6.png
Ik wil op basis van een figuur (blauw) een 3d effect creëren door - met behulp van één verdwijnpunt (c) - het figuur nogmaals te tekenen (groen).
De coördinaten van blauw (t1-t4) zijn me bekend. Ook punt c is me bekend. Het tekenen van de oranje lijnen is geen probleem. Echter moet ik nu berekenen wat de waarden van de coördinaten van de punten b1-b4 zijn.

Ik ben al uren bezig met puzzelen, dus zeg niet dat ik geen moeite heb gedaan :) Ik heb al een resultaat wat aardig correct is, maar er gaat nog iets mis.

Wat ik momenteel doe (per hoekpunt van blauw, dus viermaal):
- hoek berekenen tussen hoekpunt (bijv. t1) en c
- cos en sin uitrekenen van de hoek
- x en y waarden van t1 verhogen met cos*depth/sin*depth

Het probleem zit hem in de waarde van depth (denk ik). Ik snap niet goed hoe ik die waarde moet berekenen. Het is geen statisch getal, lijkt me. Als het blauwe vierkant dichter bij c komt, wordt de diepte minder. Kan iemand hier iets nuttigs over melden? Ik loop aardig vast. Dank alvast.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Waar moet het groene vierkant überhaupt komen? Met de gegevens die je geeft (t1,t2,t3,t4,c) kan het groene vierkant op elke willekeurige plek komen. Je zult in ieder geval één van de punten (b1,b2,b3,b4,f) moeten definiëren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ValHallASW schreef op zondag 04 april 2010 @ 14:57:
Waar moet het groene vierkant überhaupt komen? Met de gegevens die je geeft (t1,t2,t3,t4,c) kan het groene vierkant op elke willekeurige plek komen. Je zult in ieder geval één van de punten (b1,b2,b3,b4,f) moeten definiëren.
De diepte ("waar moet het groene vierkant überhaubt komen") is een keuze die ik moet maken. Laten we zeggen dat de diepte "10" is. Ik snap dan niet goed hoe ik die dieptewaarde moet verwerken in mijn berekeningen?

Acties:
  • 0 Henk 'm!

  • SmiGueL
  • Registratie: September 2005
  • Laatst online: 19:43
Je zou bijvoorbeeld kunnen zeggen dat:
- Punt f ligt op afstand x van punt e (op de lijn e-c natuurlijk)
- Punt f ligt op bijvoorbeeld 1/3 deel van lijn e-C

Wil je een vaste dikte/afstand van de schaduw?
of moet deze ook groter worden als het blauwe vierkant 'dichterij' komt?

Delidded 4770K 4.7GHz @ H220 || Gigabyte Z87X-UD4H || 16GB @ 2400MHz || Gigabyte GTX 760 || 2x128GB Samsung 830 @ RAID-0 & WD 3 TB || Iiyama XB2483HSU-B1 || Synology DS916+ 3x6TB + 120GB SSD Cache || Synology DS213+ 6TB backup


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Weet je iets van matrix en/of vector rekening? De manier waar jij het op doet is erg "2D" en dan is het soms lastig om algemene gevallen te bepalen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
SmiGueL schreef op zondag 04 april 2010 @ 15:02:
Je zou bijvoorbeeld kunnen zeggen dat:
- Punt f ligt op afstand x van punt e (op de lijn e-c natuurlijk)
- Punt f ligt op bijvoorbeeld 1/3 deel van lijn e-C

Wil je een vaste dikte/afstand van de schaduw?
of moet deze ook groter worden als het blauwe vierkant 'dichterij' komt?
Ik snap dat ik de keuze kan maken dat punt f bijvoorbeeld op 1/3 deel van de lijn e-C ligt. Echter snap ik niet hoe ik de x en y waarden van b1-b4 vervolgens kan berekenen, met behulp van die informatie?
De dikte/afstand van de schaduw varieert: hoe dichter blauw bij C komt, hoe kleiner de schaduw is. Als Blauw "op" C staat, dient er geen schaduw zichtbaar te zijn.
Zoijar schreef op zondag 04 april 2010 @ 15:03:
Weet je iets van matrix en/of vector rekening? De manier waar jij het op doet is erg "2D" en dan is het soms lastig om algemene gevallen te bepalen.
Jazeker, vectoren zijn me bekend. Echter weet ik niet goed hoe ik het e.e.a. toe moet passen...

[ Voor 19% gewijzigd door Verwijderd op 04-04-2010 15:07 ]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Maak in elk hoekpunt een vector die naar het verdwijn punt wijst. Normaliseer deze vectoren (eg deze krijgen lengte 1).

Neem nu een 'diepte' . Doe diepte*vector en het coordinaat van elk hoekpunt is: hoekpunt.x + vector.x*diepte; (zelfde voor y).

Tenminste als ik het zo snel even bedenk zou het zo wel moeten werken.

Natuurlijk is dit geen echt 3D. (Dan werk je met echte 3D coordinaten en projecteer je op het einde dit op een 2D vlak.)

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • SmiGueL
  • Registratie: September 2005
  • Laatst online: 19:43
Ok, STEL je zegt: vierkant b ligt op 1/3 tussen vierkant t en c
b1 = (c-t1)*(1/3) + t1
b2 = (c-t2)*(1/3) + t2
b3 = (c-t3)*(1/3) + t3
b4 = (c-t4)*(1/3) + t4

Zou moeten werken zo :)
wel X en Y afzonderlijk uitrekenen :),
(of b1, t1 en c als vector/array met X, Y en later eventueel Z maken)

[ Voor 39% gewijzigd door SmiGueL op 04-04-2010 15:28 ]

Delidded 4770K 4.7GHz @ H220 || Gigabyte Z87X-UD4H || 16GB @ 2400MHz || Gigabyte GTX 760 || 2x128GB Samsung 830 @ RAID-0 & WD 3 TB || Iiyama XB2483HSU-B1 || Synology DS916+ 3x6TB + 120GB SSD Cache || Synology DS213+ 6TB backup


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je kan hiermee beginnen: c - t2 - t4 is een gelijkbenig driehoek die gelijkvormig is met c - b2 - b4. De verhouding |f - c| / |e - c| is dus gelijk aan de verhouding |b2 - c| / |t2 - c| waar |x| de lengte is van die vector (i.e. sqrt(x^2+y^2))

maw. als 'f' op de helft van de afstand van 'e' tot c ligt, dan ligt 'b2' op de hleft van de afstand van 't2' tot c. Als je b2 en b4 hebt, dan neem je de x van b2 en de y van b4 voor b1, en andersom voor b3

[ Voor 30% gewijzigd door Zoijar op 04-04-2010 15:27 ]


Acties:
  • 0 Henk 'm!

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Verwijderd schreef op zondag 04 april 2010 @ 15:05:
[...]


Ik snap dat ik de keuze kan maken dat punt f bijvoorbeeld op 1/3 deel van de lijn e-C ligt. Echter snap ik niet hoe ik de x en y waarden van b1-b4 vervolgens kan berekenen, met behulp van die informatie?
De dikte/afstand van de schaduw varieert: hoe dichter blauw bij C komt, hoe kleiner de schaduw is. Als Blauw "op" C staat, dient er geen schaduw zichtbaar te zijn.


[...]


Jazeker, vectoren zijn me bekend. Echter weet ik niet goed hoe ik het e.e.a. toe moet passen...
Ik kan helaas niet veel toevoegen hierop, behalve een beetje basis van OpenGL waarin ik me verdiept heb. OpenGL gebruikt heel veel vector berekeningen omdat dit heel snel gaat. Je zou een object op een andere 'diepte' kunnen plaatsen door alle coordinaten (xyz) voor ieder punt van het voorste vierkant in een vector te plaatsen en dan de vector te vermenigvuldigen met de diepte. Dit werkt natuurlijk niet als je niet echt in een 3d omgeving werkt. Als je eigenlijk alleen X en Y coordinaten hebt en geen 'camera' kan plaatsen werkt het niet.

[ Voor 7% gewijzigd door MacWolf op 04-04-2010 15:29 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

neem c 0,0

vector t1 *2/3 = vector b1
vector t2 *2/3 = vector b2
vector t3 *2/3 = vector b3
vector t4 *2/3 = vector b4

?

Ik zou het wel even checken liniare algebra les is tijd terug, en ook ik heb het nooit hoeven toe te passen.

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 10:13

glashio

C64 > AMIGA > PC

Wikipedia: 3D projection misschien kan je er wat mee :)

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Verwijderd schreef op zondag 04 april 2010 @ 14:51:
Wat ik momenteel doe (per hoekpunt van blauw, dus viermaal):
- hoek berekenen tussen hoekpunt (bijv. t1) en c
- cos en sin uitrekenen van de hoek
Ik dacht me van de middelbare school te herinneren dat je van een niet-rechthoekige driehoek geen sinus & cosinus kan berekenen? Dus alleen als een van de hoeken in de driehoeken 90 graden is, is dat mogelijk. Klopt dit of ben ik nou gek/vergeetachtig?

Acties:
  • 0 Henk 'm!

  • Z-Dragon
  • Registratie: December 2002
  • Laatst online: 07:03
Klopt, dan moet moet je aan de gang met de (co)sinusregel. :)

^ Wat hij zegt.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Ja, hieruit zul je zien dat dat "verdwijnpunt" een leuk tekenhulpmiddel is in tekenles, maar daar staan kant en klaar formules die je kunt gebruiken om een punt op een 2d plane te mappen, want hoe bereken je dat "verdwijnpunt?"

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Martijn1993
  • Registratie: Mei 2006
  • Laatst online: 17-09 11:02
Peedy schreef op zondag 04 april 2010 @ 21:21:
[...]

Ik dacht me van de middelbare school te herinneren dat je van een niet-rechthoekige driehoek geen sinus & cosinus kan berekenen? Dus alleen als een van de hoeken in de driehoeken 90 graden is, is dat mogelijk. Klopt dit of ben ik nou gek/vergeetachtig?
Klopt inderdaad wij zijn daar nu net klaar mee op de middelbare school. Maar je kan natuurlijk wel een driehoek maken met een hoek van 90 graden. Driehoek t1, e, c dan bijvoorbeeld als ik het goed heb begrepen.

Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op zondag 04 april 2010 @ 15:27:
neem c 0,0

vector t1 *2/3 = vector b1
vector t2 *2/3 = vector b2
vector t3 *2/3 = vector b3
vector t4 *2/3 = vector b4

?

Ik zou het wel even checken liniare algebra les is tijd terug, en ook ik heb het nooit hoeven toe te passen.
Dit lijkt mij ook het beste en zou moeten werken. Het enige wat in mijn ogen na gekeken moet worden is dat je alle vectoren van t1 t/m t4 met hetzelfde getal kan vermenigvuldigen. Gevoelsmatig zou ik ja zeggen, maar zeker weten doe ik het niet.

[ Voor 3% gewijzigd door Verwijderd op 05-04-2010 00:07 ]


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Zoals al gezegd moet je gewoon netjes je 3D-projectieberekeningen doen. Die zijn niet moeilijk, en geven altijd het goede resultaat.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Bozozo schreef op maandag 05 april 2010 @ 10:01:
Zoals al gezegd moet je gewoon netjes je 3D-projectieberekeningen doen. Die zijn niet moeilijk, en geven altijd het goede resultaat.
Als c = 0,0 en projectie op vlak(vector space) niet het vlak waarvanaf je projecteerd snijnt en 2d vector -> 2d vector dan valt de helf van de projectie berekening weg te strepen.

omgekeerd als c niet 0,0 moet je je vector space eerst transfomeren als vlak wel snijnt heb je je extra dimensie nodig etc.

volgens mij staat het er ook:
If the normal of the viewing plane (the camera direction) is parallel to one of the 3D axes, the mathematical transformation is as follows; To project the 3D point ax, ay, az onto the 2D point bx, by using an orthographic projection parallel to the y axis (profile view), the following equations can be used:

bx = sxax + cx
by = szaz + cz
cx en cz zijn 0 en (+0) is niet heel erg zinnig
leuk_he schreef op zondag 04 april 2010 @ 22:43:
[...]


Ja, hieruit zul je zien dat dat "verdwijnpunt" een leuk tekenhulpmiddel is in tekenles, maar daar staan kant en klaar formules die je kunt gebruiken om een punt op een 2d plane te mappen, want hoe bereken je dat "verdwijnpunt?"
Woorden als kernel komen in me op, anyway volgens mij is dat verdwijnpunt wiskundig gewoon gedefinieerd.

Maar zo als ik al zei check het wel even want ik zit meer met mijn hoofd bij het paasbrood en of er zo nog een stukje te krijgen is. O+

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

  • FastWallie
  • Registratie: September 2001
  • Laatst online: 25-11-2024
Door gebruik te maken van gelijkvormige driehoeken (effe een loodlijnte op de lijn e-c naar het hoekpunt van resp. de groene en blauwe driehoek) volgt:

verhouding afstand e-c tot f-c = lengte zijde groen (t2-t3) tot lengte zijde blauw (b2-b3) .

Volgens mij heb je hier voldoende aan voor al je berekeningen. Zonder cos / sin etc. Of zie ik iets over het hoofd

http://www.jawal.nl


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Mr_Light schreef op maandag 05 april 2010 @ 11:25:
Woorden als kernel komen in me op, anyway volgens mij is dat verdwijnpunt wiskundig gewoon gedefinieerd.
Het verdwijnpunt (of lijn in 3D) is wiskundig het beeld van de ideaal punten in de projectieve ruimte onder de projectie. Maar projectieve geometrie is behoorlijk ingewikkeld...
Pagina: 1