Android Dividir el círculo en N partes iguales y conocer las coordenadas de cada punto de división
Tengo el requisito de que un círculo debe ser dividido en N partes iguales basadas en el número (2,3 … n. Pero quiero las coordenadas de los puntos de división.
Tengo un círculo cuyo centre(x,y)
y el radius(150)
son conocidos.
- Problema básico de conversión imperial
- En C, tan (30) me da un valor negativo! ¿Por qué?
- Comprender claramente el cálculo de la matriz
- Implementar página curl en android?
- Latitud / Longitud y metros
Pregunta:
¿Hay alguna fórmula que me dé las coordenadas de los puntos de división como se muestra en la figura. ¿Puede alguien por favor decirme la fórmula. Quiero implementarlo en Java .
Imagen de círculo para refrence:
- Convertir valores de ReplayGain a ajustes de volumen
- Desplazamiento pequeño al calcular la rotación en función del punto de contacto
- 1000 * 60 * 60 * 24 * 30 resultados en un número negativo
- Android: ¿Cómo obtener sólo dos dígitos después del punto en el valor decimal? no quiere trunc el valor
- ¿Cómo calcular la posición en un círculo con un cierto ángulo?
- ¿Debo confiar en Android para descartar los sorteos fuera de pantalla?
- Detectar si está a un kilómetro del punto de interés
- Rectángulo Coordina con Respecto al Ángulo de Rotación
Es necesario convertir entre coordenadas polares y cartesianas . El ángulo que usted necesita es el ángulo entre la línea vertical (imaginaria) que divide el círculo en la mitad y la línea que conecta el centro con el límite del círculo. Con esta fórmula se pueden calcular los desplazamientos X e Y desde el centro.
En su imagen de ejemplo el primer ángulo es 0 y el segundo es 360 / n. Cada siguiente es i*(360/n)
donde i es el índice de la línea actual que necesita dibujar. Aplicar esto le dará los desplazamientos X e Y en el orden de las agujas del reloj (y sólo puede agregarlos a las coordenadas X e Y del centro para encontrar las coordenadas de cada punto)
EDIT: algún tipo de pseudo-código:
//x0, y0 - center's coordinates for(i = 1 to n) { angle = i * (360/n); point.x = x0 + r * cos(angle); point.y = y0 + r * sin(angle); }
Ya he aceptado la respuesta … la fórmula funciona perfectamente. Aquí está la solución codificada en Java. Ayudará a otros desarrolladores.
private int x[]; // Class variable private int y[]; // Class variable private void getPoints(int x0,int y0,int r,int noOfDividingPoints) { double angle = 0; x = new int[noOfDividingPoints]; y = new int[noOfDividingPoints]; for(int i = 0 ; i < noOfDividingPoints ;i++) { angle = i * (360/noOfDividingPoints); x[i] = (int) (x0 + r * Math.cos(Math.toRadians(angle))); y[i] = (int) (y0 + r * Math.sin(Math.toRadians(angle))); } for(int i = 0 ; i < noOfDividingPoints ;i++) { Log.v("x",""+i+": "+x[i]); Log.v("y",""+i+": "+y[i]); } }
Donde x0 y y0 son coordenadas del centro del círculo y r es radio.
En mi caso:
Entrada x0 = 0, y0 = 0 y r = 150, noOfDividingPoints = 5
salida
Punto1: (150,0)
Punto2: (46,142)
Punto 3: (-121,88)
Punto 4: (-121, -88)
Punto 5: (46, -142)
- ¿Cómo puedes cambiar el color de un trazado de refresco para cada rotación?
- Android Studio Espresso Prueba de error: Empty Test Suite