Pagina 1 van 1

xy coordinaten hoeken berekenen

Geplaatst: 30 apr 2011, 16:58
door clankill3r
Afbeelding

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

Geplaatst: 30 apr 2011, 22:13
door arie
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?

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2011, 13:46
door clankill3r
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?

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2011, 13:49
door arie
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?

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2011, 14:11
door clankill3r
Voor een programma dat ik schrijf.

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2011, 16:59
door arie
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?

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2011, 17:12
door clankill3r
Ben je wiskunde leraar?

En ja het is gelukt, heb de rechteronderhoek te pakken. Nu de andere 3 nog maar dat moet wel lukken.

Re: xy coordinaten hoeken berekenen

Geplaatst: 10 mei 2011, 09:57
door RickMegens
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

Re: xy coordinaten hoeken berekenen

Geplaatst: 10 mei 2011, 11:55
door arie
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
;-)

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2016, 08:10
door MarkV
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?

Re: xy coordinaten hoeken berekenen

Geplaatst: 01 mei 2016, 12:45
door arie
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?