• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Coordinaten van een lijn bepalen in Excel/Vba

Status
Niet open voor verdere reacties.

ExcelRules

Nieuwe gebruiker
Lid geworden
25 nov 2011
Berichten
4
Situatie:
Ik heb in Excel 2007 een grafiek (spreiding) gemaakt met daarin diverse punten. In de grafiek staat ook een rechte (schuine) lijn (een shape). Ik wil kunnen bepalen of een punt in de grafiek boven/onder/links/rechts van de lijn ligt.

De vraag is dan ook: hoe kan ik bepalen waar een punt (coordinaat) zich bevindt tov een lijn? Wie weet hiervoor de oplossing?
 
Dan moet je 2 dingen weten, nl:
1. Wat is de vergelijking van de rechte lijn?
(de algemene gedaante van zo'n lijn is: y=ax+b, waarbij a en b bekend moeten zijn).
2. Wat zijn de coördinaten van het punt waarvan je de ligging t.o.v. de rechte wil berekenen?
Een punt kan bv. de coördinaat (2,3) hebben).
 
Zowel het beginpunt als het eindpunt van de lijn zijn bekend, als coordinatoren in de grafiek (bijv. startpunt x=5, y =7; eindpunt x=10, y =10). Er is geen formule: de gebruiker kan naar believen een lijn via vba laten tekenen op basis van een begin- en een eindpunt.

Ook de coordinaten van de punten in de grafiek zijn bekend, dus bijv. x=6, y=8.
 
zelfs dan is er wel een formule. y=startY + ((eindY-beginY)/(eindX-beginX))*x :p

Een lijn heeft in principe alleen boven/onder OF links/rechts. Een combinatie van beide in een vlak hebben geen betekenis. X invullen in bovenstaande formule. indien de uitkomst lager is dan Y bevind te coördinaat zich boven de lijn.
 
Dank Zapatr en Wampier: door jullie antwoorden ben ik op het juiste spoor gekomen.

Voor diegenen die het antwoord willen weten:
De formule van een rechte lijn is y = ax + b (zie Zapatr). Als twee punten van de lijn bekend zijn, bijv. (6,10) en (8,0) is a hieruit af te leiden door : (0-10)/8-6), dus a = -5. Vervolgens kun je b bepalen door een van de punten in de formule in te voren, bijv (6,10): 10 = (-5*6) + b, dus b = 40. Formule vd lijn is dus y = -5x + 40.

Als je de x-waarde van een willekeurig punt (4,9) uit de grafiek invoert in de formule, dan is de y-waarde 20; dit is groter dan de y-waarde 9 uit het willekeurige punt en daarom ligt het willekeurige punt onder de lijn.

Omzetten van bovenstaande verhaal in vba is niet moeilijk.

@Wampier: als ik het punt (4,9) in jouw formule invoer, dan geeft de formule aan dat het punt boven de lijn moet liggen. Klopt dat of deed ik iets fout?
 
ExcelRules,
je hebt het juist berekend.
En wil je weten of een punt P met coördinaat (x3, y3) boven of onder de rechte y=a*x+b ligt,
bereken dan y3-(a*x3+b).
Is de uitkomst:
> 0, dan ligt P boven de rechte;
< 0, dan ligt P onder de rechte;
= 0, dan ligt P óp de rechte.

Toegepast op het punt (4, 9) uit jouw laatste bericht hierboven en wetende dat a = -5 en b = 40,
geeft y3-(a*x3+b) als uitkomst: 9-(-5*4 + 40) = 9 - 20 = -11
Dat is kleiner dan 0, dus het punt (4,9) ligt ONDER de rechte.
 
Laatst bewerkt:
Let wel op, hier kan natuurlijk een div/0 error uitkomen bij een pure verticale lijn. Nu zal dit in jouw geval waarschijnlijk niet voorkomen, maar altijd goed het eventueel af te vangen.

*edit* mijn formule klopt wel maar gaat ervan uit dat de eerste coordinaat op de nullijn start anders moet je inderdaad eerst nog (b) bepalen

via mijn formule(met juist aangepaste start y=40) x=4 op de lijn geeft (-4*5) + 40 = 20. de lijn is op 20, je coordinaat is op 9, dus onder. Hoewel de methode om om te schrijven voor Y zoals zapatr deed mogelijk handiger is in deze situatie.
 
Laatst bewerkt:
wampier,
in de berekening y3-(a*x3+b) wordt er niet gedeeld,
daarom begrijp ik jouw opmerking niet zo goed.
 
Het ging dan ook om mijn voorbeeld voor de bepaling van "a": je berekend namelijk de heling via: (Y2-Y1) / (X2-X1). Indien het een vertikale lijn betreft (x2 = x1) krijg je dus een div/0. In jouw formule van de locatiebepaling ga je ervan uit dat "a" reeds bekend is, maar dan bij je al voorbij een eventuele div/0 :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan