xy coordinaten hoeken berekenen
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
xy coordinaten hoeken berekenen
Hoe kan ik de coordinaten van de hoeken berekenen?
Ik weet het centrum van de rechthoek (x, y), ik weet de breedte en de hoogte van de rechthoek en de rotatie.
In het geval van het plaatje was het:
centrum = 300, 300
breedte = 100
hoogte = 400
rotatie = 45
Re: xy coordinaten hoeken berekenen
Om te beginnen:
Definieer punt P = (200,0) en punt Q = (0,50).
Kan je de beeldpunten van P en Q vinden als je om de oorsprong O=(0,0) over een hoek alpha roteert?
Definieer punt P = (200,0) en punt Q = (0,50).
Kan je de beeldpunten van P en Q vinden als je om de oorsprong O=(0,0) over een hoek alpha roteert?
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: xy coordinaten hoeken berekenen
sorry ik moet nog veel leren..
wat is P en wat is Q?
En waarom is de ene 200 en de ander 0,50?
Wat zijn beeldpunten, ik vind alleen de definitie als in een pixel op het scherm.
De oorsprong(0, 0), is dat de linker bovenhoek van het plaatje of het centrum van de rechthoek?
wat is P en wat is Q?
En waarom is de ene 200 en de ander 0,50?
Wat zijn beeldpunten, ik vind alleen de definitie als in een pixel op het scherm.
De oorsprong(0, 0), is dat de linker bovenhoek van het plaatje of het centrum van de rechthoek?
Re: xy coordinaten hoeken berekenen
Wat is de achtergrond van deze vraag?:
Is het een wiskundeopgave, of ben je een programma aan het schrijven en wil je vooral de oplossing gebruiken, of wellicht nog iets anders?
Is het een wiskundeopgave, of ben je een programma aan het schrijven en wil je vooral de oplossing gebruiken, of wellicht nog iets anders?
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: xy coordinaten hoeken berekenen
Voor een programma dat ik schrijf.
Re: xy coordinaten hoeken berekenen
We werken met een coordinatenstelsel waarin elk punt aangegeven wordt door een x-coordinaat en een y-coordinaat. Notatie punt P = (x,y).
Zie bv http://nl.wikipedia.org/wiki/Cartesisch ... tenstelsel, plaatje rechtsboven.
Dit werkt met hetzelfde principe als met je pixelcoordinaten x en y.
Het roteren gaat hierin eenvoudig om de oorsprong O = (0,0).
Daar nemen we dan in eerste instantie het centrum van de rechthoek.
De hoekpunten A, B, C en D van je rechthoek kan je nu aangeven als:
A = (-l/2, -b/2)
B = (l/2, -b/2)
C = (l/2, b/2)
D = (-l/2, b/2)
waarbij l=lengte en b=breedte van je rechthoek
In jouw voorbeeld: rechthoek = 400 x 100:
A=(-200, -50)
B=(200, -50)
C=(200, 50)
D=(-200, 50)
Het centrum = middelpunt = O = (0, 0)
Teken hiervan zelf svp even een plaatje.
Als we vervolgens deze rechthoek roteren om O over alpha graden, kunnen we de volgende rotatieformules gebruiken:
Voor elk punt P = (x,y) geldt dat dit door deze rotatie afgebeeld wordt op punt P ' = (x', y'),
waarbij:
x' = x * cos(alpha) - y * sin(alpha)
y' = x * sin(alpha) + y * cos(alpha)
(zie bv http://nl.wikipedia.org/wiki/Rotatiematrix)
Voorbeeld:
als we over 45 graden roteren (= 45 graden tegen de klok in), dan wordt het beeld van C:
x' = 200*cos(45) - 50*sin(45) = 106.0660...
y' = 200*sin(45) + 50*cos(45) = 176.7766...
Dus: C = (200, 50) wordt afgebeeld op C ' = (106.0660, 176.7766)
De andere geroteerde hoekpunten vind je op dezelfde manier.
Dan rest nog de translatie van het middelpunt = O naar M = (mx, my) = (300, 300):
bij de x-coordinaten van al je punten tel je mx op,
bij de y-coordinaten van al je punten tel je my op.
Het verschoven C ' = C '' = (106.0660 + 300, 176.7766 + 300) = (406.0660, 476.7766).
En als je de coordinaten van de hoekpunten weet, hoef je daartussen alleen nog maar lijnen te tekenen.
Dit is alles.
Let nog wel op dat:
(1) de meeste programmeertalen in radialen werken ipv graden
(2) in de y-as van een bitmap de pixels omgekeerd (van boven naar beneden) genummerd worden
(3) omzetten van gebroken getal naar geheel getal in veel programmeertalen afkappen is, dus al je de coordinaten wilt omzetten naar gehele waarden (integers) kan je er het beste eerst 0.5 bij optellen en dan afkappen (hierdoor ontstaat het normale afronden) - tenzij jouw taal een echte round() functie kent.
Lukt het zo?
Zie bv http://nl.wikipedia.org/wiki/Cartesisch ... tenstelsel, plaatje rechtsboven.
Dit werkt met hetzelfde principe als met je pixelcoordinaten x en y.
Het roteren gaat hierin eenvoudig om de oorsprong O = (0,0).
Daar nemen we dan in eerste instantie het centrum van de rechthoek.
De hoekpunten A, B, C en D van je rechthoek kan je nu aangeven als:
A = (-l/2, -b/2)
B = (l/2, -b/2)
C = (l/2, b/2)
D = (-l/2, b/2)
waarbij l=lengte en b=breedte van je rechthoek
In jouw voorbeeld: rechthoek = 400 x 100:
A=(-200, -50)
B=(200, -50)
C=(200, 50)
D=(-200, 50)
Het centrum = middelpunt = O = (0, 0)
Teken hiervan zelf svp even een plaatje.
Als we vervolgens deze rechthoek roteren om O over alpha graden, kunnen we de volgende rotatieformules gebruiken:
Voor elk punt P = (x,y) geldt dat dit door deze rotatie afgebeeld wordt op punt P ' = (x', y'),
waarbij:
x' = x * cos(alpha) - y * sin(alpha)
y' = x * sin(alpha) + y * cos(alpha)
(zie bv http://nl.wikipedia.org/wiki/Rotatiematrix)
Voorbeeld:
als we over 45 graden roteren (= 45 graden tegen de klok in), dan wordt het beeld van C:
x' = 200*cos(45) - 50*sin(45) = 106.0660...
y' = 200*sin(45) + 50*cos(45) = 176.7766...
Dus: C = (200, 50) wordt afgebeeld op C ' = (106.0660, 176.7766)
De andere geroteerde hoekpunten vind je op dezelfde manier.
Dan rest nog de translatie van het middelpunt = O naar M = (mx, my) = (300, 300):
bij de x-coordinaten van al je punten tel je mx op,
bij de y-coordinaten van al je punten tel je my op.
Het verschoven C ' = C '' = (106.0660 + 300, 176.7766 + 300) = (406.0660, 476.7766).
En als je de coordinaten van de hoekpunten weet, hoef je daartussen alleen nog maar lijnen te tekenen.
Dit is alles.
Let nog wel op dat:
(1) de meeste programmeertalen in radialen werken ipv graden
(2) in de y-as van een bitmap de pixels omgekeerd (van boven naar beneden) genummerd worden
(3) omzetten van gebroken getal naar geheel getal in veel programmeertalen afkappen is, dus al je de coordinaten wilt omzetten naar gehele waarden (integers) kan je er het beste eerst 0.5 bij optellen en dan afkappen (hierdoor ontstaat het normale afronden) - tenzij jouw taal een echte round() functie kent.
Lukt het zo?
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: xy coordinaten hoeken berekenen
Ben je wiskunde leraar?
En ja het is gelukt, heb de rechteronderhoek te pakken. Nu de andere 3 nog maar dat moet wel lukken.
En ja het is gelukt, heb de rechteronderhoek te pakken. Nu de andere 3 nog maar dat moet wel lukken.
-
- Nieuw lid
- Berichten: 1
- Lid geworden op: 10 mei 2011, 09:34
Re: xy coordinaten hoeken berekenen
Beste Arie,
Ik heb volgens mij bijna een gelijke probleemstelling. Ik wil een aantal, variabel in te geven, punten op een rechtshoek de X en Y coordinaten bereken. Ik heb dit eerder al eens gedaan voor een circel, maar weet even niet hoe ik dit kan toepassen op een rechthoek. Ik heb dit toen ook op internet gevonden. Hieronder zie je het staan:
Width: 100 // Breedte van de circel of elips
Height: 100 // Hoogte van de circel of elips
Points: 4 // Aantal punten die je wilt op de circel of elips
Point: 0 // Van welk punt wil je de coordinaten? punt 1 = 0 ( dus voor 4 punten 0 t/m 3)
CenterX 50 // (Width / 2)
CenterY 50 // (Height / 2)
SinglePoint 1,570796327 // ((2*pi)/points)
X 50,00 // (centerX * cos((singlepoint*point)))
Y 0,00 // (centerY * sin((singlepoint*point)))
Hoe kan ik dit aanpassen zodat ik dit kan toepassen voor vierkanten / rechthoeken?
Alvast hartelijk bedankt voor de moeite.
Met vriendelijke groet,
Rick Megens
Ik heb volgens mij bijna een gelijke probleemstelling. Ik wil een aantal, variabel in te geven, punten op een rechtshoek de X en Y coordinaten bereken. Ik heb dit eerder al eens gedaan voor een circel, maar weet even niet hoe ik dit kan toepassen op een rechthoek. Ik heb dit toen ook op internet gevonden. Hieronder zie je het staan:
Width: 100 // Breedte van de circel of elips
Height: 100 // Hoogte van de circel of elips
Points: 4 // Aantal punten die je wilt op de circel of elips
Point: 0 // Van welk punt wil je de coordinaten? punt 1 = 0 ( dus voor 4 punten 0 t/m 3)
CenterX 50 // (Width / 2)
CenterY 50 // (Height / 2)
SinglePoint 1,570796327 // ((2*pi)/points)
X 50,00 // (centerX * cos((singlepoint*point)))
Y 0,00 // (centerY * sin((singlepoint*point)))
Hoe kan ik dit aanpassen zodat ik dit kan toepassen voor vierkanten / rechthoeken?
Alvast hartelijk bedankt voor de moeite.
Met vriendelijke groet,
Rick Megens
Re: xy coordinaten hoeken berekenen
Eerst nog even 2 vragen:
[1] Je zoekt dus geen punten die op gelijke afstand over je omtrek verdeeld worden, maar punten die een gelijke hoek hebben tov het middelpunt van je rechthoek?
[2] Ligt je rechthoek parallel aan de assen, of kan die over elk willekeurig aantal graden gedraaid liggen?
PS: je hoeft je vragen overigens niet per se aan mij te richten, er zijn meer mensen op dit forum die naast wiskunde ook genoeg van informatica weten
[1] Je zoekt dus geen punten die op gelijke afstand over je omtrek verdeeld worden, maar punten die een gelijke hoek hebben tov het middelpunt van je rechthoek?
[2] Ligt je rechthoek parallel aan de assen, of kan die over elk willekeurig aantal graden gedraaid liggen?
PS: je hoeft je vragen overigens niet per se aan mij te richten, er zijn meer mensen op dit forum die naast wiskunde ook genoeg van informatica weten
Re: xy coordinaten hoeken berekenen
Goedemorgen,
Misschien een stomme vraag maar ik kom er niet uit.
Ik probeer een programma te schrijven (android developer) waarbij ik een lijn wil tekenen onder een hoek.
De lijn start vanuit een vast punt alleen de lengte en de hoek zijn variabel.
De hoek is van 0 tot maximaal 360 graden.
Welke formule moet ik daarvoor gebruiken en hoe? Om de juiste x,y coördinaten te kunnen berekenen?
Misschien een stomme vraag maar ik kom er niet uit.
Ik probeer een programma te schrijven (android developer) waarbij ik een lijn wil tekenen onder een hoek.
De lijn start vanuit een vast punt alleen de lengte en de hoek zijn variabel.
De hoek is van 0 tot maximaal 360 graden.
Welke formule moet ik daarvoor gebruiken en hoe? Om de juiste x,y coördinaten te kunnen berekenen?
Re: xy coordinaten hoeken berekenen
Als gegeven is:
- het startpunt = (xstart, ystart)
- lengte van de lijn = L
- hoek van de lijn = H
dan is het eindpunt = (xeind, yeind) gegeven door:
xeind = xstart + L * cos(H)
yeind = ystart + L * sin(H)
Ik ben geen android developer programmeur, maar:
sin() en cos() zijn functies die doorgaans beschikbaar zijn via een bibliotheek Math
Vaak zijn deze gedefinieerd in radialen in plaats van graden.
In dat geval worden:
xeind = xstart + L * cos(PI*H/180.0)
yeind = ystart + L * sin(PI*H/180.0)
waarbij PI = pi = 3.141....
Kom je hiermee verder?
- het startpunt = (xstart, ystart)
- lengte van de lijn = L
- hoek van de lijn = H
dan is het eindpunt = (xeind, yeind) gegeven door:
xeind = xstart + L * cos(H)
yeind = ystart + L * sin(H)
Ik ben geen android developer programmeur, maar:
sin() en cos() zijn functies die doorgaans beschikbaar zijn via een bibliotheek Math
Vaak zijn deze gedefinieerd in radialen in plaats van graden.
In dat geval worden:
xeind = xstart + L * cos(PI*H/180.0)
yeind = ystart + L * sin(PI*H/180.0)
waarbij PI = pi = 3.141....
Kom je hiermee verder?