verder_met_kruisbepaling

15
PATRICK TEN BRUGGENCATE Verder met kruisbepaling. Methodes om een kruis te bepalen. Patrick ten Bruggencate Heerlen 19-10-2016 Twee methodes om een kruis te bepalen bij een puntenverzameling van vier.

Transcript of verder_met_kruisbepaling

Page 1: verder_met_kruisbepaling

PATRICK TEN BRUGGENCATE

Verder met kruisbepaling.

Methodes om een kruis te bepalen.

Patrick ten BruggencateHeerlen

19-10-2016

Twee methodes om een kruis te bepalen bij een puntenverzameling van vier.

Page 2: verder_met_kruisbepaling

1 4 punten op 1 as en verder.Als punten op 1 as liggen zoals bijvoorbeeld de x-as dan krijg je geen kruis. Je krijgt niet eens een oppervlakte.

Verplaats 1 punt van de as en je krijgt een oppervlak maar geen kruis.

Verplaats nog een punt van de as en je krijgt oppervlak en een kruis mits er niet meer dan 2 punten op 1 lijn liggen. Een lijn hoeft geen as te zijn maar kan dat wel zijn.

Page 3: verder_met_kruisbepaling

2 Een sorteringsalgoritme om punten te voorzien van labels.Stel je hebt de coördinaten van 4 punten maar je mag ze niet plotten om te zien hoe de punten ten opzicht van elkaar staan.De coördinaten zijn:x-as y-as1 23 32 10 0Je kan deze coördinaten sorteren op de x-as en de y-as. In dit geval sorteren we van klein naar groot.Eerst de x-as:x-as y-as0 01 22 13 3Omdat de x-as van klein(links) naar groot(rechts) wordt gesorteerd kan men de volgende labels aan de coördinaten plakken.x-as y-as Label x-as0 0 Links1 2 Minder links2 1 Minder rechts3 3 RechtsNu de y-as sorteren van klein naar groot:x-as y-as0 02 11 23 3Omdat de y-as van klein(onder) naar groot(boven) wordt gesorteerd kan men de volgende labels aan de coördinaten plakken.x-as y-as Label y-as0 0 Onder2 1 Minder onder1 2 Minder boven3 3 Boven

Page 4: verder_met_kruisbepaling

2.1 Aan de hand van de 4 punten een kruisbepalen.Dus je hebt nu 4 punten met 8 labels na sortering op de x en y-as.x-as y-as Label x-as Label y-as1 2 Minder links Minder boven3 3 Rechts Boven2 1 Minder rechts Minder onder0 0 Links OnderOm een kruis te bepalen moet je de diagonalen bepalen want er is altijd een links en rechts zoals er ook altijd een boven en onder is.Dus links is in dit geval onder maar kan ook minder onder, minder boven of boven zijn. 1 punt van de diagonaal gevonden.Dus er is links onder dus is er ook een rechts en in dit geval een boven maar kan ook bijvoorbeeld minder boven, minder onder of onder zijn. 2’de punt gevonden.Omdat diagonalen bestaan uit 2 lijnen zijn de andere twee punten ook een diagonaal. Voor deze puntenverzameling is de eerste diagonaal van (0,0) naar (3,3). De tweede diagonaal loopt dan van (1,2) naar (2,1).

2.2 Meerdere punten op 1 as regel.Stel je hebt meerdere punten op 1 as liggen zoals in het derde figuur in hoofdstuk 1.Om deze punten te sorteren moet er een extra regel komen. De regel luidt als volgt:Als punten dezelfde waarde hebben voor een x of y-as dan sorteer deze punten op de volgende as verder niet de as waar je op aan het sorteren bent.Met andere woorden sorteer je op de y-as en de waardes op de y-as zijn hetzelfde dan sorteer deze groep coördinaten op x-as verder.De volgende coördinaten zijn gegeven:x-as y-as3 11 02 10 0Oplopend gesorteerd op de y-as geeft:x-as y-as0 01 02 13 1Zoals je ziet wordt de groep (0,0) en (1,0) oplopend gesorteerd op de x-as ook al sorteer je ze op de y-as. Hetzelfde geldt voor de groep (2,1) en (3,1).

Page 5: verder_met_kruisbepaling

3 Bepalen of er een kruis is ongeacht sorteringsalgoritme.Nu heb je een sorteringsalgoritme dat diagonalen kan bepalen maar dit algoritme ziet geen verschil tussen 3 punten die op 1 lijn liggen:

Of een punt binnen de driehoek van de andere punten ligt:

In beide gevallen geen kruis.

3.1 Twee manieren om kruis te bepalen.De eerste manier behelst een formule, permutaties en analyse van de data. Zie bijlage.De tweede manier behelst het berekenen van hoeken volgens de eenheidscirkel en het uitlezen van de gesorteerde data om te bepalen of punten op 1 lijn liggen en of een punt in de driehoek van de andere punten ligt.

3.1.1 De eenheidscirkel.Dit is de eenheidscirkel zoals bekend in de wiskunde.

Stel je hebt twee punten A en B met de volgende coördinaten:A (1,1) en B (3, 3).Stel we bepalen de hoek α gezien vanuit punt A naar punt B.

∝=arctan ( Yb−YaXb−Xa

) = arctan (3−13−1 ) = 45 graden.

Nu bepalen we de hoek α gezien vanuit punt B naar punt A.

Page 6: verder_met_kruisbepaling

∝=arctan ( Ya−YbXa−Xb

) = arctan (1−31−3 ) = 45 graden.

Zoals je ziet maakt het niet uit vanuit welk punt je kijkt de hoek blijft hetzelfde.

3.2 Hoeken berekenen voor een puntenverzameling van 4.De volgende puntenverzameling gaan we onderzoeken.

Met de coördinaten:A = (0, 0) B = (2 ,1) C = (1, 2) en D = (3, 3)Nu gaan we de hoeken bepalen gezien vanuit A naar de andere punten:Naam: Delta x: Delta y: Hoek in graden:Van A naar B (2 – 0) = 2 (1 – 0) = 1 26,57Van A naar C (1 – 0) = 1 (2 – 0) = 2 63,43Van A naar D (3 – 0) = 3 (3 – 0) = 3 45Hetzelfde doen we nu voor de hoeken gezien vanuit D naar de andere punten:Naam: Delta x: Delta y: Hoek in graden:Van D naar B (2 – 3) = -1 (1 – 3) = -2 63,43Van D naar C (1 – 3) = -2 (2 – 3) = -1 26,57Van D naar A (0 – 3) = -3 (0 – 3) = -3 45Nu gaan we deze data sorteren van kleinste hoek naar grootste hoek.Gezien vanuit A:Naam: Hoek in graden:Van A naar B 26,57Van A naar D 45Van A naar C 63,43Nu kan je deze data als volgt uitlezen in een sequentie.Van A naar B van B naar D van D naar C en weer terug naar A. Oftewel: ABDC. Gezien vanuit D:Naam: Hoek in graden:Van D naar C 26,57Van D naar A 45Van D naar B 63,43De sequentie is: Van D naar C van C naar A van A naar B en weer terug naar D. Oftewel: DCAB.Als je de twee sequenties onder elkaar zet krijg je het volgende:ABDCDCAB waarbij dit het verschoven patroon is van ABDC alleen lees je nu van D daarna C weer terug naar A en daarna B.De punten A en D zijn gekozen omdat A het onderste punt is en D is het bovenste punt van deze puntenverzameling. Je kan ook het linkse en het rechtse punt kiezen maar dan moet je andersom draaien. Met andersom bedoel ik van links naar rechts en niet zoals de eenheidscirkel van rechts naar links.

Page 7: verder_met_kruisbepaling
Page 8: verder_met_kruisbepaling

3.2.1 Punten op 1 lijn.Als 3 of meer punten op 1 lijn liggen dan zijn de hoeken exact hetzelfde. Omdat het algoritme dit doet voor 2 punten namelijk het bovenste en het onderste punt zullen alle punten die op 1 lijn liggen gedetecteerd worden.

3.2.2 Punt binnen de driehoek van de andere punten.Stel je hebt de volgende puntenverzameling.

Onderste punt is A en bovenste punt is D.Na hoekbepaling zal voor punt A de volgende sequentie naar boven komen: ABCD.Terwijl na hoekbepaling voor punt D de volgende sequentie naar boven komt: DACB.Zetten we deze sequenties onder elkaar krijg je:ABCDDACB terwijl dit DABC had moeten zijn voor een kruis. Dus voor een punt in de driehoek van de andere punten krijg je een afwijkende sequentie en is hiermee detecteerbaar.

3.3 Conclusie.Als de puntenverzameling een kruis bevat dan is de sequentie van het onderste en het bovenste punt hetzelfde alleen maar verschoven.Als een punt in de puntenverzameling op 1 lijn of as ligt met twee andere punten dan krijg je dezelfde hoeken.Als een punt in de puntenverzameling in de driehoek ligt van de andere punten dan krijg je een andere sequentie voor boven en onder die je niet kunt verschuiven.

Page 9: verder_met_kruisbepaling

Bijlage.

Page 10: verder_met_kruisbepaling

1 Bepalen van kruis via formule.Om een kruis te bepalen aan de hand van een formule gaan we uit van het volgende figuur:

Elke lijn kan men beschrijven met de volgende formule:a∗x+b= yWaarbij a de richtingscoëfficiënt is en b een constante. De richtingscoëfficiënt kan men bepalen door de volgende formule:

a=∆ y∆x Waarbij ∆ x gelijk is aan x2 – x1 en ∆ y gelijk is aan y2 – y1.

Verder moet vermeld worden dat de formule geldt voor een lijn die oneindig lang is.Dus voor de twee diagonalen kan men schrijven:a∗x+b= yc∗x+d= yOmdat we een kruis zoeken kan men deze twee formules tegenover elkaar zetten want y is gelijk voor beide lijnen waar deze kruisen.a∗x+b=c∗x+dHieruit kan men x bepalen:

x= d−ba−c

Waarbij de volgende formules gelden voor a, b, c en d:

a= y2− y1x2−x1

b= y 1

c= y 4− y 3x 4−x 3

b= y 3Als men deze waardes invult in de formule en de formule verder versimpelt dan krijg je de volgende formule voor de x waarde van het kruis:

Xcross= (Y 3−Y 1 )∗(X 2−X 1 )∗(X 4−X3 )(X 4−X 3 )∗(Y 2−Y 1 )−(X 2−X1 )∗(Y 4−Y 3)

Als men deze formule bestudeert ziet men dat als de waarde onder de deelstreep nul wordt dat er geen kruis is. De lijnen lopen evenwijdig aan elkaar.Als er een kruis is zal de waarde van Xcross gedefinieerd zijn maar het kan zijn dat deze waarde buiten het vierkant ligt gedefinieerd door de vier punten.

Page 11: verder_met_kruisbepaling

2 De twaalf permutaties van vier punten.Om alle unieke lijnen te krijgen moet je de 12 permutaties nalopen van 4 punten want P1, P2, P3, P4 is hetzelfde als P4, P3, P2, P1. Maar om aan de twaalf te komen moet je wel alle permutaties genereren van 4 punten en dat zijn er 24. Als formule ziet dat er als volgt uit:aantal=n !Men spreekt dit uit als n faculteit.In de kolom naast de punten staat een kruis als de sequentie al eens is voorgekomen. Verder is dit het overzicht van de lijnen van bijvoorbeeld P1 naar P3 naar P2 naar P4 en weer terug naar P1.

P1 P2 P3 P4P1 P2 P4 P3P1 P3 P2 P4P1 P3 P4 P2P1 P4 P3 P2P1 P4 P2 P3

P2 P1 P3 P4P2 P1 P4 P3P2 P3 P1 P4P2 P3 P4 P1 XP2 P4 P1 P3 XP2 P4 P3 P1 X

P3 P1 P2 P4P3 P1 P4 P2P3 P2 P1 P4P3 P2 P4 P1 XP3 P4 P1 P2 XP3 P4 P2 P1 X

P4 P1 P2 P3 XP4 P1 P3 P2 XP4 P2 P1 P3 XP4 P2 P3 P1 XP4 P3 P1 P2 XP4 P3 P2 P1 XMet deze informatie kan je aan de hand van de formule in het eerdere hoofdstuk bepalen of er een kruis is. Verder is het interessant om te kijken naar het algoritme om de permutatie te maken. Zoals u ziet wijzigen de laatste twee punten van plaats telkens na een nieuwe reeks zoals bijvoorbeeld bij P1, P2, P3, P4 met als volgende permutatie P1, P2, P4, P3. Dit betekent dat als de eerste van de tweedelige reeks bekend is in dit geval P1, P2, P3, P4 dan weet je ook de volgende permutatie namelijk P1, P2, P4, P3 dit betekent op zijn beurt dat als je P1, P2, P3, P4 hebt gegenereerd dat je met deze kennis dus 2 permutaties weet die je kan opzoeken om te kijken of de permutaties al een keer zijn voorgekomen. Als het goed is zal dit je generatietijd sneller maken ten opzichte van elke permutatie gewoon genereren en dan opzoeken in de lijst met permutaties.