TCHart i przeciannie wykresów.

0

Witam serdecznie.
Mam taki problem. Otóż mam dwa wykresy i chce nalożyć na nie jeszcze jedną serię która będzie zaznaczała pewną obwiednię. Aby to zrobić muszę znaleŹć punkt przecięcia wykresów i w tym problem ze nie mardzo wiem jak. Myślałem żeby skorzystać z właściwości YValue i porównać za pomocą warunku wartości dwóch punktów i w ten sposób znaleŹć przecięcie ale w YValue musze podać kolejny punkt a problem w tym że te dwie serie których przecięcia szukam mają rózne ilości punktów tzn jedna jest parabolą dość mocno zagęszczoną a druga to zwykła prosta linia składająca się z dwóch punktów. Czy jest jakaś metoda w delphi która znajdzie idealnie punkt przecięcia?
Dziękuję za wszelką pomoc :)
Pozdrawiam

1

W jaki sposób masz zadane te funkcje? Wzorami czy konkretnymi zbiorami punktów? Jeśli wzorami to ułóż z nich układ równań i go rozwiąż, w wyniku dostaniesz punkt(y) przecięcia.

0

Tutaj mam konkretne punkty zadane. Choć mnei teraz oświeciłeś i spróbuję wyciągnąć równanie prostej bo mam dwa punkty podane. A tak z ciekawości jeżeli były by to konkretne punkty to jaki byłby sposób na uzyskanei punktu przecięcia ?

0

Mając zbiór punktów możemy sobie wyobrazić wykres jako linia łamana składająca się z kilku połączonych ze sobą odcinków. Znajdź te dwa odcinki, które się przecinają. Następnie możesz przeprowadzić interpolację. Najprościej (lecz nie najdokładniej) będzie użyć tu interpolacji liniowej czyli zwyczajnie przyjąć, że szukany punkt to punkt przecięcia się odcinków. Bardziej dokładny wynik otrzymasz stosując interpolację kwadratową (zwłaszcza, że to parabola). Ale to może na później zostawię...

0

Walcze z tym i nie mam pojecia czemu mi działa. Tzn wykres nie rusuje się do momentu przecięcia lecz parabola przeciąga sie dużo powyżej prostej. Oto kod
a) funkcja znajdująca współczynnik kierunkowy prostej :

function wzor_liniowy(x,y:extended):real;
var
 a:extended;
begin
  a:=(y-1)/x;
  result:=a;

end

procedura rysująca parabolę:

procedure TForm1.Button3Click(Sender: TObject);
var

  kier1,kier2,ip,ip2,ip3,vp:extended;
begin
   wykres.series[6].Clear;
   ip:=StrTofloat(vs1.Text)*sqrt(abs(3.8));

   ip2:=3.8;
   kier1:=StrToFloat(vs1.Text);
   kier2:=wzor_liniowy(StrToFloat(vc.text),StrToFloat(ncp.Text));
    

       repeat
        begin
           vp:=kier1*sqrt(abs(ip2));
           wykres.Series[6].AddXY(vp,ip2,'',clTeeColor);
           ip:=ip+0.1;
           ip2:=ip2+0.1;
        end;
       until ((power(ip,2)/power(kier1,2))>(kier2*ip+1));
     end;

Warunek pętli jest taki że rysować ma dopóki wartości obydwóch funkcji dla tych samych parametrów nie będą równe. jak widać w pętli obliczam nie wartość a parametr funkcji kwadratowej ( ip2 to wartość która jest narzucona a vp to odpowiednik x) Czyli mam funkcję postaci x=a*sqrt(y). Ale i tak rysowanie wg mnie powinno dobrze przebiegać. Ciekawe jest to że jeśli zmienię krok zmiany zmiennej ip na większy to parabola z kolei jest niedociągnięta. Im większy krok tym prótsza parabola. Sprawdzałem tę funkcję i nie potrafię znaleŹć błędu. Proszę bardzo o pomoc . Dziękuje z góry. Pozdrawiam :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1