Witam.
Poszukuję jakiegoś rozwiązania, jak podzielić okrąg na n równych części. Trochę ciężko poruszać się gdy punkt 0.0 jest w lewym górnym rogu a nie na środku koła i każdemu promieniowi trzeba nadawać inne wartości. Posiada ktoś może jakieś materiały, które by mi pomogły?
Na razie mam stworzony program, z trzema klasami: Java(główna), MainWindow(tworzenie okna), MyPanel(rysowanie okręgu i promieni).
Ciężko mi to wrzucić nawet w jakąś pętle, żeby te promienie sensownie narysować.
Ale znając promień możesz przenieść punkt na środek. Coś trzeba pokombinować z dzieleniem przez 360* i wykorzystaniem PI :)
Właśnie nie wiem jak ustalić ten środek, a co do dzielenia, to mam wzór: (2*PI/n)*kąt alfa
(kąt alfa to 360*/n
<- tak mi się wydaje)
wzory na współrzędne punktów na okręgu:
x = x0 + r * cos(kąt)
y = y0 + r * sin(kąt)
//(BTW uwielbiam ten wzór, bo nauczyłem się go jeszcze jak byłem dzieciakiem i bawiłem się w QBasicu w rysowanie animowanych okręgów)
//
gdzie kąt może wynosić od 0 do 360 stopni (albo od 0 do dwóch pi, jeśli kąt masz w radianach), r to jak wiadomo promień, a x0 to współrzędna x środka okręgu, a y0 to współrzędna y środka okręgu.
Tak więc żeby podzielić okrąg na równe części wystarczy podzielić 360 stopni (albo dwa pi) na ileś części. Np. dzielimy okrąg na 4: 360 stopni / 4 = 90 stopni.
A potem możemy iterować kolejno po łukach, np. od 0 do 90 stopni, potem od 90 do 180 etc. I używając wzoru odpowiednio możemy obliczyć punkt na okręgu, przypadający w danym kącie.
(Chociaż w sumie nie napisałeś w jakim celu chcesz podzielić okrąg/ co oznacza podzielenie okręgu w tym przypadku. Wyobraziłem sobie, że po prostu chcesz je narysować, np. każdą część innym kolorem...)
Trochę ciężko poruszać się gdy punkt 0.0 jest w lewym górnym rogu a nie na środku koła i każdemu promieniowi trzeba nadawać inne wartości.
dlatego dodajesz/odejmujesz współrzędne środka okręgu, jak coś liczysz.
Posiada ktoś może jakieś materiały, które by mi pomogły?
to klasyczny problem więc od ch... jest tego nie tylko w necie, ale i w bibliotekach w dziale matematyka. O tyle komfortowa sytuacja, że nawet możesz znaleźć gotowe wzory na to, co chcesz zrobić.
Wszystko pięknie, prawie skończone, tylko mam problem z wyświetlaniem, a mianowicie:
Stworzyłem coś takiego:
double x,y,r;
r = this.getWidth()/2;
int l = 4,n;
n=360/l;
for (int i = 0; i < 360; i= i+n) {
x = (this.getWidth()/2 + r * Math.cos(i));
y = (this.getHeight()/2 + r * Math.sin(i));
int x1 = (int) x;
int y1 = (int) y;
g.drawLine(this.getWidth()/2, this.getHeight()/2, x1, y1);
}
this.getWidth()/2 i this.getHeight()/2 to środek okręgu, bo stworzyłem go tak :
g.drawOval(0, 0, this.getWidth(), this.getHeight());
musiałem też przekonwertować x i y na int bo g.drawLine nie chchiał stworzyc prostej z 2x int i 2x double
Zastosowałem się do wzorów : x = x0 + r * cos(kąt), y = y0 + r * sin(kąt) i pierwszą linię rysuje mi prawidłowo, od środka w prawo bo tak wynoszą założenie. Jeśli chce podzielić okrąg na 4 równe części to będą 4 prostopadłe wobec siebie linie, a tutaj mam problem, bo linie przyjmują jakiś inny schemat.
Załączam zdjęcie:
Wszystko działa, nie zmieniłem wartości w sinusie i cosinusie na radiany. Mozna zamknąć.