wektor wodzący

0

Hej!
Robie w delphi wektor wodzacy, tzn jeden koniec znajduje sie w ustalonym punkcie, a drugi koniec jest tam, gdzie znajduje sie kursor myszy na formatce. Ta czesc tego programiku dziala mi bez zarzutu. Ale musze jeszcze zrobic grot tego wektora (czyli strzalka na koncu) i mam takie pytanie: czy zna ktos jakis sposob rozwiazania, jakis algorytm itp, aby ten grot byl ustawiony prawidlowo w stosunku do wektora w kazdym dowolnym jego polozeniu? Czyli jesli bede poruszal myszka w dowolnym kierunku, wektor bedzie sie zmienial, to zeby grot wektora byl rysowany prawidlowo. z gory dzieki za jakakolwiek podpowiedz!!

0

a cóż tu jest do podpowiadania. Masz jeden koniec kreski będącej połową strzałki, masz długość oraz kąt jaki ma tworzyć z wektorem. Z punktu i kąta wyliczysz wzór prostej a z długości obliczysz punt - czysta matematyka

0

To proste: wysujesz 2 odcinki

  • kursor myszy - punkt powstały przez obrócenie wektora wodzącego o powiedzmy 5 stopni i skrócenie o 10%
  • kursor myszy - punkt powstały przez obrócenie wektora wodzącego o powiedzmy -5 stopni i skrócenie o 10%

Obroty oczywiście dokonujesz względem ustalonego punktu zaczepienia wektora. Najpierw oczywiście musisz policzyć kąt nachylenia oryginalnego wektora, ale mając jego zaczepienie oraz lokację kursora myszy, jest to zadanie z podstaw trygonometrii.

Przykład rysowania strzałki z grotem:

//Parametry:
//  Canvas: powierzchnia rysowania
//  p:      początek wektora
//  k:      koniecz wektora
procedure Rysuj(Canvas:TCanvas; p:TPoint; k:TPoint);
var arc:double;                 //kąt obrotu wektora
    r:double;                   //długość wektora
    arr:array[0..2] of TPoint;  //trójkąt grota
begin
arc:=ArcTan2(-k.Y+p.Y, k.X-p.X);
r:=sqrt(sqr(k.X-p.X)+sqr(k.Y-p.Y))*0.95;
arr[0]:=Point(p.X+round(r*cos(arc+0.015)), p.Y+round(r*-sin(arc+0.015)));
arr[1]:=Point(p.X+round(r*cos(arc-0.015)), p.Y+round(r*-sin(arc-0.015)));
arr[2]:=k;
with Canvas do
  begin
  Polygon(arr);
  MoveTo(p.X, p.Y);
  LineTo(k.X, k.Y);
  end;
end;
0

wielkie dzieki!! dam juz sobie rade:)

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