Dzielenie koła na równe części.

0

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ć.

1

Ale znając promień możesz przenieść punkt na środek. Coś trzeba pokombinować z dzieleniem przez 360* i wykorzystaniem PI :)

0

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)

2

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ć.

0

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ąć.

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