Rekenhulp gevraagd...

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Plaats reactie
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Beginnen met

Code: Selecteer alles

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Oftewel de eenheidsmatrix. Da's het matrixc-equivalent van vermenigvuldigen met 1: dan moet eruit komen wat erin gaat.

Translatie is ook nog simpel:

Code: Selecteer alles

1  0  0  0
0  1  0  0
0  0  1  0
Tx Ty Tz 1
En scalen eveneens:

Code: Selecteer alles

Sx  0  0  0
0  Sy  0  0
0  0  Sz  0
0  0  0   1
Daar kun je al aardig mee testen.

[edit]
Of jouw getallen kloppen zou ik even moeten uitrekenen, maar met bovenstaande matrices kun je goed testen. Een punt op 0,0,1 die je 49 in de Z+ verplaatst moet uitkomen op 0,0,50. Schaal die met 0,5 en het antwoord moet 0,0,25 worden. Enzovoorts.
[/edit]
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

Ik heb die tweede ook even in een test verhaaltje gezet:

Code: Selecteer alles

// Vectoren/punten hebben 4 elementen ipv 3: [X Y Z 1]
  Origineel[3] := 1.0;

 for  i := 0 to 3 Do
   Getransformeerd[i] := Origineel[0] * Matrix[0][i] + Origineel[1] * Matrix[1][i] + Origineel[2] + Matrix[2][i] + Origineel[3] * Matrix[3][i];
 end_for;

 Getransformeerd[0] := Getransformeerd[0]/Getransformeerd[3];
 Getransformeerd[1] := Getransformeerd[1]/Getransformeerd[3];
 Getransformeerd[2] := Getransformeerd[2]/Getransformeerd[3];
 
ook hier heb ik zomaar weer een paar getallen ingegooid:
Afbeelding
https://www.dropbox.com/s/2c80ccpz0fei6 ... 1.PNG?dl=0

maar of het klopt??? :lol:
Laatst gewijzigd door Swets op 19 jul 2022 00:59, 2 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

Afbeelding
https://www.dropbox.com/s/i9v8dc9ucj9pf ... 2.PNG?dl=0

dus het gaat niet goed?

ik heb in de matrix de 1 gezet op de plaatsen die je beschreef...... orgineel is 3x100... getransformeerd is 1.980198...

of begrijp ik je verkeerd?
Laatst gewijzigd door Swets op 19 jul 2022 01:00, 2 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Nee, ergens klopt er iets niet. Code klopt volgens mij wel met wat ik uit m' n hoofd opgelepeld heb. Zou dat wel goed zijn? :lol:

MAar vreemd is het wel, want schijf ik jouw getallen met de hand uit volgens jouw 'Getransformeerd := Origineel[0] * Matrix[0] + Origineel[1] * Matrix[1] + Origineel[2] + Matrix[2] + Origineel[3] * Matrix[3];'

dan kom ik op
Getransformeerd[0] = 100.0 * 1.0 + 100.0 * 0.0 + 100.0 * 0.0 + 1.0 * 0.0 = 100.0
Getransformeerd[1] = 100.0 * 0.0 + 100.0 * 1.0 + 100.0 * 0.0 + 1.0 * 0.0 = 100.0
Getransformeerd[2] = 100.0 * 0.0 + 100.0 * 0.0 + 100.0 * 1.0 + 1.0 * 0.0 = 100.0
Getransformeerd[3] = 100.0 * 0.0 + 100.0 * 0.0 + 100.0 * 0.0 + 1.0 * 1.0

En vervolgens
Getransformeerd[0] = 100.0 / 1.0 = 100.0
Getransformeerd[1] = 100.0 / 1.0 = 100.0
Getransformeerd[2] = 100.0 / 1.0 = 100.0

Dat ziet er dan weer goed uit.

Toch een bugje of ergens wat vergeten ofzo?
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12055
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door hugo stoutjesdijk »

Swets, wat doet jouw basic met : sum+=MatrixA[x]*MatrixB[x][j];
Moet effektief gelijk zijn aan : sum=sum+MatrixA[x]*MatrixB[x][j];
Misschien dat daar iets zit.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

in die tweede verhaaltje, zit niet dat sum+

ik zal nog eens kijken of ik fouten zie.... ik weet nu wat er uit moet komen....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

DaBit schreef:

Code: Selecteer alles

float Origineel[4], Getransformeerd[4], Matrix[4][4];

// Vectoren/punten hebben 4 elementen ipv 3: [X Y Z 1]
Origineel[3] = 1.0f;
for ( i = 0; i < 4; ++i ) {
       Getransformeerd[i] = Origineel[0] * Matrix[0][i] + Origineel[1] * Matrix[1][i] + Origineel[2] + Matrix[2][i] + Origineel[3] * Matrix[3][i];
}
Getransformeerd[0] = Getransformeerd[0]/Getransformeerd[3];
Getransformeerd[1] = Getransformeerd[1]/Getransformeerd[3];
Getransformeerd[2] = Getransformeerd[2]/Getransformeerd[3];
Getransformeerd = Origineel[0] * Matrix[0] + Origineel[1] * Matrix[1] + Origineel[2] * Matrix[2] + Origineel[3] * Matrix[3];

moet dan niet vermenigvuldige zijn ipv Optellen?
ga ik ff proberen...
edit:

Ja dus, dan komen wel jouw antwoorden er uit...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

Afbeelding
https://www.dropbox.com/s/wpm7ylbuppxlc ... 3.PNG?dl=0

doe ik dit:

Code: Selecteer alles

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
en ik vul bij orgineel 100,100,100 in komt er bij getransformeerd netjes 100,100,100 terug...

Code: Selecteer alles

Sx  0  0  0
0  Sy  0  0
0  0  Sz  0
0  0  0   1
maak ik er dan andere getallen van , bijvoorbeeld 5, krijg ik 500 terug..

Code: Selecteer alles

1  0  0  0
0  1  0  0
0  0  1  0
0  0 49  1
bovenstaande, zie screenshot, als ik 0,0,1 als origineel invult, krijg ik netjes 0,0,50.0 terug...
dus dit werkt....

vind het wel leuk.... het word allemaal wel iets duidelijker nu ik met getallen kan spelen....
weet wel niet hoe ik verder moet... :lol: maar tis wel leuk...

ik denk iets van eerst in de matrix gaan zetten wat we willen gaan doen , verschalen, verschuiven ...enz enz
dan, denk ik , dat in origineel , ik alle hoekpunten een keer in moet lezen.... en dan krijg ik in Getransformeerd de nieuwe coördinaten terug
zoiets denk ik?
maar hoe je dan gaat draaien... ?
Laatst gewijzigd door Swets op 19 jul 2022 01:02, 1 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Dan doe je nu de rotatiematrices:

Rotatie om X-as:

Code: Selecteer alles

[ 1,         0,          0, 0]
[ 0, cos(xrot), -sin(xrot), 0]
[ 0, sin(xrot),  cos(xrot), 0]
[ 0,         0,          0, 1]
Rotatie om Y-as

Code: Selecteer alles

[ cos(yrot), 0, sin(yrot), 0]
[         0, 1,         0, 0]
[-sin(yrot), 0, cos(yrot), 0]
[         0, 0,         0, 1]
Rotatie om Z-as.

Code: Selecteer alles

[ cos(zrot), -sin(zrot), 0, 0]
[ sin(zrot),  cos(zrot), 0, 0]
[         0,          0, 1, 0]
[         0,          0, 0, 1]
(overigens even schaamteloos gekopieerd van hier want die had ik niet zo in m'n hoofd zitten)

Als het kwartje echt gevallen is dan zie je in 1 oogopslag dat het roteer-om-X verhaaltje roteert in het YZ vlak.

Roteer je een punt [1,0,0] 90 graden om de Z-as, dan komt daar [0,1,0] uit (teken maar eens).

Daarna moet je maar eens 2 operaties cascaderen door matrices te vermenigvuldigen. Bijvoorbeeld uitgaan van [1,0,0] als input, een rotatie matrix aanmaken die 90 graden roteert om de Z, vermenigvuldigen met een translatiematrix die 50 opschuift, en de vector met de uiteindelijke matrix vermenigvuldigen.

Dus
Origineel = [1,0,0,1]
RotMatrix = MaakRotZMatrix(90)
TranMatrix = MaakTranMatrix(0,49,0)
TransformMatrix = MatMul4x4(TransMatrix, RotMatrix)

Getransformeerd = VecMatMul(Origineel, TransformMatrix)

Maak dat maar eens, inclusief die functies want die ga je vaak genoeg aanroepen...

Oja, kwa getallen erin stoppen: niett zomaar iets erin proppen maar iets pakken waarvan je kunt beredeneren wat eruit moet komen. Anders weet je ook niet of het werkt, toch? :lol:

Wil je trouwens kijken of je nummertjes kloppen die in de matrix staan: in CamBam kun je ook een transformatiematrix invullen. In jouw code 33,6792 graden roteren om de Y-as moet overeen komen met wat CamBam zegt als je dat doet.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

ik geloof dat ik verlopig even genoeg info heb om aan de slag te kunnen.....

1 dingetje nog.... eeehhh ff kijken hoe ik het gaat verwoorden .....

stel een pallet is 800 breedte, en 1000 lang en 150 mm hoog....

eeeeh... de hoekpunten van me pallet...ik heb 1 hoek 0,0,0 genoemd....(links achter top), naar voren (naar je toe zeg maar) heb ik de breedte van de pallet opgeteld, dus (links voor top) heeft coördinaat 0,0,800 , de rechter bovenhoek is dus 1000,0,800 enz enz.... en die zelfde hoek, maar dan de onderkant van de pallet is dus 1000,150,800.... ik hoop dat je het tot zo ver kan volgen?

maar hoe zet ik die nu op een bepaalde plek op het beeld? ook via zo matrix verhaal, The Translation Matrix verhaal?

en de doosje coördinaten hangen dus ook weer aan die 0,0,0 van de pallet... al hun maten is gerelateerd aan dat nulpunt.... hoe krijg ik die op de goede plek?

en nog een vraag ( en ik verwacht echt niet dat je pas klare oplossingen heb, maar misschien tips...)
ik was van plan het geheel nu ook wat meer op te delen in sub routines en functies....
ik denk dat ik voor het teken van een doosje een functie schrijf, waar ik , vanuit een lus naar toespring , en de goede data mee geeft...

misschien moet ik dat matrix verhaal ook verschillende functies van maken? eentje voor verschalen, eentje voor draaien om x, eentje voor draaien om Y of is dat juist niet verstandig?

oja , die nieuwe data, welke uit die matrix komt, zet ik gewoon in die array, waar ze uit kwamen? zodat ik altijd de laatste waarde heb?
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Swets schreef: stel een pallet is 800 breedte, en 1000 lang en 150 mm hoog....
Coordinaten klinken mij wat vreemd in de oren, maar hoe jij dingen positioneert in je 3D ruimte mag je helemaal zelf bepalen.
maar hoe zet ik die nu op een bepaalde plek op het beeld? ook via zo matrix verhaal, The Translation Matrix verhaal?
Ja, officieel wel, maar dat is een relatief lastige nog. Zie hier wat uitleg over de OpenGL projectiematrices:
http://www.songho.ca/opengl/gl_projectionmatrix.html

Ik zou nog heel even wat je wil zien centeren rondom XY=(0,0) met een positieve Z door middel van translatie, rotatie en schalen. En dan vrij simpel:

Xscherm = 400+400*(Coordinaat.X/Coordinaat.Z)
Yscherm = 300+300*(Coordinaat.Y/Coordinaat.Z)

(even uitgaande van een 800x600 scherm)

Door te delen door Z bereik je dat een kubus die verder weg ligt kleiner word, perspectief met een enkel verdwijnpunt dus. Je 'oog' staat dan in feite op (0,0,0) en kijkt in de Z+ richting.

Doet de truuk in jouw geval voorlopig prima; je hebt geen Z-buffer, clipping planes, bla nodig.

Leg gewoon even een pen op tafel; oog staat bij de dop en dat is (0,0,0). Hij kijkt richting de punt van de pen. Nu nog een stapeltje papier als pallet, en bedenken wat je moet doen om het in beeld te krijgen.
en de doosje coördinaten hangen dus ook weer aan die 0,0,0 van de pallet... al hun maten is gerelateerd aan dat nulpunt.... hoe krijg ik die op de goede plek?
Met translatie kun je elk punt of groep punten neerzetten waar je ze hebben wil.
(het kwartje van 1 model-doos en een zwik transformatiematrices is nog niet gevallen, maar dat komt vanzelf als je er wat meer mee speelt)
misschien moet ik dat matrix verhaal ook verschillende functies van maken? eentje voor verschalen, eentje voor draaien om x, eentje voor draaien om Y of is dat juist niet verstandig?
Dat is juist wel verstandig. Dan heb je een losse functie die je los kunt testen en los kunt gebruiken. Als die functie in een stukje testcode goed functioneert doet-ie dat in het geheel (meestal) ook wel.
oja , die nieuwe data, welke uit die matrix komt, zet ik gewoon in die array, waar ze uit kwamen? zodat ik altijd de laatste waarde heb?
Nee, die moet een nieuwe array in, want die moet je nog sorteren en tekenen.

Ook dat komt wel, zorg er eerst maar voor dat je alle vlakjes van je doosjes, tussenlegvellen, pallets, etcetera getransformeerd krijgt. Da's al even lastig genoeg.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

oke... ik ga aan de slag.... gaande weg zullen er wel weer vragen komen....

bedankt weer....!!
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2662
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »



https://www.dropbox.com/s/s06a92qm4vo5w ... 0.pdf?dl=0

ik heb maar even het programma als pdf erbij gezet... want die lappen code maakt het niet echt makkelijk lezen?

maar dit heb ik nu.... tis nog niet super veel.... maar vind het al heel wat....

maar ik snap een paar dingen niet.... ik heb de 8 hoekpunten precies uitgelijnd op de midden van het scherm... dus de Y as loopt in het midden van het scherm, en de x-as ook... en alle hoekpunten zitten dus gespiegel tov de assen... en als je het begin ziet, staat de pallet (bruine vierkant) precies in de midden.... maar als ik hem dan verschaal naar 0.25 van de grote , springt hij opeens naar de linker bovenhoek? hoe komt dat?

verschuiven gaat goed... alleen bij schuiven over de z-as zie ik niets gebeuren? hij wordt bijvoorbeeld niet groter of kleiner?

en met het draaien zie je ook dat het niet draait over het hart.... dus eerst dit maar eens....
Laatst gewijzigd door Swets op 19 jul 2022 01:05, 2 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Je spulletje staat niet gecenterd romdom (0,0,0) want je begint meteen met schermcoordinaten.

Als ik een vierkant van (10,10) naar (100,100) schaal met 0,5, dan word het (5,5) tot (50,50) en schuift-ie dus richting het nulpunt ipv dat-ie uniform schaalt.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Plaats reactie