Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Delphi] Intersect tussen twee series berekenen

Pagina: 1
Acties:

  • Atlas
  • Registratie: Mei 2002
  • Niet online

Atlas

Ik flits niet meer terug!

Topicstarter
Ok de titel is misschien wat vaag maar beter dan dat kan ik het niet verwoorden, want misschien zit ik wel compleet verkeerd te denken, vandaar ook dit topic :)

De situatie: Ik heb een grafiek. Dit is een soort parabool. Ik weet de maximale waarde van de parabool door middel van "Series1.MaxYValue()". Nu wil ik op een bepaalde waarde onder dat maximum een lijn tekenen. Dit is niet zo moeilijk en gaat ook prima. Maar dan nu het probleem: hoe bereken/ bepaal ik de 2 kruispunten van beide grafieken? De Y coordinaat heb ik al (duh :P), maar de X-coordinaat is dus het probleem. Ik kan hem niet uitrekenen aan de hand van de formule voor de parabool, want het is geen perfecte parabool (gegevens komen uit een meetopstelling). De waardes zijn ook niet op te zoeken in de tabel want de tabel heeft een resolutie die niet zo hoog is.

Opbouw van de grafiek
code:
1
2
3
4
5
6
7
8
9
10
11
series1.AddXY(-5,-15);
series1.AddXY(-4,-6);
series1.AddXY(-3,1);
series1.AddXY(-2,6);
series1.AddXY(-1,9);
series1.AddXY(0,10);
series1.AddXY(1,9);
series1.AddXY(2,6);
series1.AddXY(3,1);
series1.AddXY(4,-6);
series1.AddXY(5,-15);


Plaatje ter verduidelijking van het probleem:
Afbeeldingslocatie: http://crew.tweakers.net/Atlas/delphi.jpg

Dus: Gezocht: de x-coordinaten van het kruispunt van de groene en rode lijn :)
Ik heb al meerdere malen mijn hoofd erover gebroken en heb het idee dat ik wat over het hoofd zie. Iemand die mij een duwtje in de goeie richting kan geven? :)

Join the dark side, we have cookies :)
You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het is toch gewoon een snijpunt van 2 lijnen berekenen?
Je hebt de groene lijn al, en je trekt een rechte lijn (rood) er door heen; dus een kwestie van zoeken welke lijnstukken de y waarde (7) snijden (-2,6; -1,9 voor het linker snijpunt en 1,9; 2,6 voor het rechter) en dan de X voor het snijpunt van dat lijnstuk berekenen. Of denk ik nou raar? :P

[ Voor 15% gewijzigd door RobIII op 20-05-2008 16:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Atlas
  • Registratie: Mei 2002
  • Niet online

Atlas

Ik flits niet meer terug!

Topicstarter
Even afgezien van het feit dat jouw snijnpuntcoordinaten niet kloppen ( :+ ) zeg jij dus dat ik de coordinaat voor het snijpunt en de coordinaat na het snijpunt moet opzoeken. Aan de hand daarvan een lineare formule van die 2 punten maken (y = ax +b), en dan daar de y invullen en de x uitrekenen? Of sla ik de plank compleet mis/ kan het makkelijker? :)

Join the dark side, we have cookies :)
You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Atlas schreef op dinsdag 20 mei 2008 @ 16:24:
Even afgezien van het feit dat jouw snijnpuntcoordinaten niet kloppen
Whuh? Volgens mij wel hoor?
Afbeeldingslocatie: http://tweakers.net/ext/f/4a5ph9tfQTUZmUz3Jh1KPtpY/full.gif

En zo hoef je toch alleen maar de snijpunten van de blauwe met groene lijnen te berekenen? En de Y heb je voor beide punten al, je hoeft dus alleen de X te bepalen.

Je loopt dus door je collectie lijnstukken heen (je moet ze in principe allemaal nalopen als je niet weet hoe vaak de grafiek de lijn snijdt; je toont nu een parabool maar voor hetzelfde geld is het een onregelmatige 'lijn'?) en zodra ze de Y snijden moet je daarvoor de X bepalen.

code:
1
2
3
4
5
foreach lijnstuk in collectie
  if snijdt lijnstuk(y1, y2) de groene as y
    bepaal x voor snijpunt van lijnstuk
  end if
next

[ Voor 40% gewijzigd door RobIII op 20-05-2008 16:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

De simpele methode is inderdaad de lineaire interpolatie tussen je datapunten (ook gelijk de snelste methode :P). Als je wat nauwkeuriger wilt zijn zal je aan de curve fitting met de least squares methode moeten. (vakje lineaire algebra which you should have finished by now ;) )