Beste,
Ik ben nu al een tijdje bezig met dit probleem en kom er niet uit. Vandaar mijn post op dit forum. Ik probeer een symbool te laten snappen naar een lijn. Deze lijnen bevinden zich in een raster met XY coördinaten. Op basis van de positie van de muis wil ik de XY coördinaten van het symbool op de dichtstbijzijnde lijn bepalen.
In principe zijn de XY coördinaten van elk element bekend namelijk.
- de twee XY coördinaten van iedere lijn van punt a naar punt b
- de XY coördinaten van de muispositie
Dit wil ik doen door middel van onderstaand stappenplan:
Stap 1: Dichtstbijzijnde lijn berekenen door hoogtelijn te bepalen naar iedere lijn.
https://drive.google.com/file/d/0B-FM1e ... sp=sharing
Door van iedere lijn de hoogtelijn naar muispositie te bepalen kan ik de dichtstbijzijnde lijn selecteren waar een symbool op geplaatst moet worden.
Stap 2: De positie van symbool op de lijn bepalen
Dit is de stap waar ik niet uitkom. Eerst wil ik bijgaande tekening uitleggen.
- De rode driehoek zijn drie afzonderlijke lijnen met een bekende XY op punt A en een bekende XY op punt B
- De oranje lijn is de berekende hoogtelijn uit stap 1.
- De blauwe lijnen zijn hulplijnen op de hoogtelijn te bepalen zoals in Stap 1.
- De grijze cirkeltjes zijn de potentiele muisposities.
https://drive.google.com/file/d/0B-FM1e ... sp=sharing
De vraag is nu hoe bereken ik de XY coördinaten op het punt waar de hoogtelijn samenkomt op de rode lijn. Dit onafhankelijk van de muispositie (onder, boven, links of rechts van de rode lijn). Dus bij gebruik van tangens, co-sinus is de overstaande of schuine zijde niet altijd de bedoelde lijn.
https://drive.google.com/file/d/0B-FM1e ... sp=sharing
Helaas kreeg ik het niet voor elkaar om afbeeldingen te plaatsen of te uploaden. Deze zijn via de links beschikbaar op mijn google drive.
Alvast bedankt voor ieders hulp.
Goneometrie XY coordinaten bepalen
Re: Goneometrie XY coordinaten bepalen
Je projectie kan zonder goniometrische functies, dat heeft voordelen voor je computer programma.
Neem je eerste plaatje (de driehoek ABC).
Als daarin punt C niet punt C van je driehoek zou zijn, maar je muisklik M (dus C = M), dan zoek je de loodrechte projectie van M op de lijn door A en B.
Dat is het snijpunt van lijn h en lijn AB. Noem dat snijpunt P.
P is dus de projectie van M op AB, je zoekt P.
Punt P ligt op de lijn door A en B, als we deze 3 punten als vectoren zien, geldt dus:
waarbij (b - a) de richtingsvector van de lijn is en lambda een getal.
We zoeken nu de lambda zodanig dat MP loodrecht op AB staat.
In dat geval is het inproduct van vectoren (m - p) en (b - a) gelijk aan nul:
ofwel
Vul nu voor p de eerste vergelijking in:
en dit geeft:
ofwel
ofwel:
ofwel:
ofwel, als je de coordinaten van A, B en M gebruikt:
Hiermee weet je lambda, en kan je met de eerste vergelijking P bepalen:
De lengte van lijnstuk MP bepaal je vervolgens via de stelling van Pythagoras:
Voorbeeld:
Neem
A = (2, 0)
B = (8, 3)
M = (5, 4)
Dan is
waardoor
en
Kom je hiermee verder?
PS:
Als:
[1] lambda = 0 dan is P = A
[2] 0 < lambda < 1 dan ligt P tussen A en B
[3] lambda = 1 dan is P = B
Voor alle andere lambda ligt P op de lijn door A en B, maar niet op lijnstuk AB maar in het verlengde van AB.
Als je de projectie van een muisklik op een driehoek wilt, kan het gebeuren dat de muisklik voor alle 3 de lijnstukken projecties geeft buiten de driehoek. Je kan dan het dichtstbijzijnde hoekpunt bepalen.
Neem je eerste plaatje (de driehoek ABC).
Als daarin punt C niet punt C van je driehoek zou zijn, maar je muisklik M (dus C = M), dan zoek je de loodrechte projectie van M op de lijn door A en B.
Dat is het snijpunt van lijn h en lijn AB. Noem dat snijpunt P.
P is dus de projectie van M op AB, je zoekt P.
Punt P ligt op de lijn door A en B, als we deze 3 punten als vectoren zien, geldt dus:
waarbij (b - a) de richtingsvector van de lijn is en lambda een getal.
We zoeken nu de lambda zodanig dat MP loodrecht op AB staat.
In dat geval is het inproduct van vectoren (m - p) en (b - a) gelijk aan nul:
ofwel
Vul nu voor p de eerste vergelijking in:
en dit geeft:
ofwel
ofwel:
ofwel:
ofwel, als je de coordinaten van A, B en M gebruikt:
Hiermee weet je lambda, en kan je met de eerste vergelijking P bepalen:
De lengte van lijnstuk MP bepaal je vervolgens via de stelling van Pythagoras:
Voorbeeld:
Neem
A = (2, 0)
B = (8, 3)
M = (5, 4)
Dan is
waardoor
en
Kom je hiermee verder?
PS:
Als:
[1] lambda = 0 dan is P = A
[2] 0 < lambda < 1 dan ligt P tussen A en B
[3] lambda = 1 dan is P = B
Voor alle andere lambda ligt P op de lijn door A en B, maar niet op lijnstuk AB maar in het verlengde van AB.
Als je de projectie van een muisklik op een driehoek wilt, kan het gebeuren dat de muisklik voor alle 3 de lijnstukken projecties geeft buiten de driehoek. Je kan dan het dichtstbijzijnde hoekpunt bepalen.