Rysowanie prostych przechodzących przez punkt – moduł Graph w Pascalu

0

Cześć, przepraszam, jeżeli obraziłem was tego typu postem, ale próbowałem cały dzień i nie mam pomysłu jak zrobić coś takiego jak na załączonej grafice.
Próbowałem w jakikolwiek sposób użyć komend typu line, ale w line podajemy współrzędne końca i początku linii, a tutaj potrzebujemy żeby były to średnice okręgu. Głowię się, a nie jestem w tym fachowcem, mam to na studiach jako poboczny przedmiot od trzech miesięcy a w internecie naprawdę bardzo ciężko jest znaleźć przykłady prostych grafik tego typu (wbrew pozorom). Proszę o jakąś pomoc, do tej pory kombinowałem coś w ten deseń:

Program grafika;
Uses graph;
var sterownik, tryb, k:integer;

Procedure liniepionowe(n:integer);
var i,z:integer;
begin
   begin
   i:=9;
   setcolor(i);
   for z:=0 to n do
    begin
    line(i+100*z,i-100*z,i-100*z,i+100*z);
    end;
   end;
end;

begin
   writeln('k='); readln(k);
   detectgraph(sterownik,tryb);
   initgraph(sterownik,tryb,'');
   setlinestyle(15,13,0);
   liniepionowe(k);
   readln;
   closegraph;
end.

Ale to raczej kompletnie nie w tym kierunku powinno iść.

1

w line podajemy współrzędne końca i początku linii, a tutaj potrzebujemy żeby były to średnice okręgu

Wydaje mi się, że promienie okręgu są mimo wszystko odcinkami ;-)
A skoro są, to można je narysować za pomocą procedury line.

Tak czy siak: jest to zadanie bardziej matematyczne niż programistyczne - poczytaj o równaniu parametrycznym okręgu.

0

Na załączonym obrazku nie ma "średnic", są za to linie proste wychodzące z ustalonego punktu (środka okręgu) i biegnące do punktu położonego na okręgu.
Czyli musisz narysować linię z ustalonego punktu do punktu obliczonego (dla różnych kątów).
Obliczenie wiąże się z trygonometrią, a o ile pamiętam, to sinus i cosinus pozwalają to wyliczyć, np. sinus 30 stopni daje położenie w pionie w połowie wysokości promienia, a cosinus 30 stopni daje położenie w poziomie w ~86.6% długości promienia.

2

Do namalowania linii ze środka okręgu pod zadanym kątem i o określonej długości służą proste obliczenia:

X := OriginX + Cos(Angle) * Radius;
Y := OriginY + Sin(Angle) * Radius;

Więcej informacji i obrazki znajdziesz tutaj: https://gamedev.stackexchange.com/a/9610

Obliczenia te z powodzeniem wykorzystałem w projekcie swojego platformera, w którym to świetliki poruszają się właśnie po okręgu, zgodnie z ruchem wskazówek zegara lub odwrotnie. To w którym miejscu na okręgu znajduje się świetlik obliczane jest na podstawie jego sztywnej lokalizacji (środek okręgu), wielkości zataczanego okręgu (rozmiar promienia) oraz numerowi klatki ruchu (wartość kąta).

Nie zapomnij tylko o odpowiedniej konwersji wartości kątów pomiędzy stopniami a radianami, bo funkcje Sin i Cos operują na kątach właśnie wyrażonych w radianach.

0

@Patryk27, @Tig - ale w sumie to co za różnica, czy będzie miał serię promieni rysowanych ze środka okręgu do punktu biegającego sobie po obwodzie, czy będzie łączył sobie dwa punkty goniące się po obwodzie i przesunięte względem siebie o 180 stopni? Moim zdaniem wychodzi na to samo.

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