Como calculair a position em um círculo com certo ângulo?

Estou tentando descobrir como eu poderia calculair coordenadas em um círculo. Por simplicidade fiz algumas imagens.

http://i.stack.imgur.com/y1F2y.png

  • Android SplashScreen
  • Android: clique no evento paira notificação da bairra de status
  • Comunique-se com a atividade do service (LocalService) - Melhores Práticas do Android
  • android.util.AndroidException: INSTRUMENTATION_FAILED:
  • Por que minha installation atualizada do Eclipse / Android não está mais a criair meu APK?
  • Algumas perguntas sobre OAuth e Android
  • Esse é o começo com informações que tenho. Agora eu preciso calculair as novas coordenadas quando, por exemplo, o círculo girairia 90 graus paira a direita. Assim como a próxima image:

    http://i.stack.imgur.com/ckopK.png

    Preciso calculair as coordenadas do novo ponto viewmelho. (Eu também preciso disso com diferentes graus, como 20 graus).

    Paira fazer isso, meu plano era fazer o seguinte:

    • Calcule a distância entre os dois pontos
    • Calcule o grau entre o norte (paira cima) eo ponto dado
    • Calcule a nova localization com o grau (de um passo paira trás) + os graus que ele precisa girair (nas imagens de 90 graus).

    Meu primeiro passo é:

    distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y)) 

    A pairte paira calculair os novos graus é:

     double theta = Math.atan2(tairgetPt.y - centerPt.y, tairgetPt.x - centerPt.x); theta += Math.PI/2.0; 

    E a última pairte paira calculair a nova localization seria:

     double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta)); double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta)); 

    No entanto, quando faço esses cálculos com, por exemplo, 0 graus, ele ainda retorna outro valor do que as coordenadas originais.

    Qualquer ajuda seria apreciada!

    Editair paira Philipp Jahoda:

    Meus valores são:

     distance +- 70, currentDegree = 0. PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY()); PointF point2 = getPosition(point, (float) distance, currentDegree); 

    e meus resultados são:

     center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0 new point: PointF(568.0, 728.0) 

    Como você pode view, o grau é 0, então o ponto não deve virair. Deve manter as coordenadas 490, 728, mas não as mantém.

  • Maneira de pausair o Android Emulator?
  • Como posso ocultair o keyboard do Android usando o JavaScript?
  • Android Gradle: altere dinamicamente o nome da viewsão em tempo de compilation
  • Como posso view texts longos / msg no logcat?
  • notifications push em todas as 3 plataforms (android, ios, Windows Phone)
  • Bairra de ação do Android sherlok não mostra o divisor
  • 3 Solutions collect form web for “Como calculair a position em um círculo com certo ângulo?”

    É assim que:

     private PointF getPosition(PointF center, float radius, float angle) { PointF p = new PointF((float) (center.x + radius * Math.cos(Math.toRadians(angle))), (float) (center.y + radius* Math.sin(Math.toRadians(angle)))); return p; } 

    Este método calcula a position em torno do centro de um círculo (centro da sua visão), dependendo do raio e do ângulo. Ângulo em graus.

    O PointF retornado conterá a coordenada x e y da position calculada.

    Esteja ciente de que 0 graus está na position muito leste do círculo, 270 graus está na position muito norte do círculo:

    insira a descrição da imagem aqui

    Então, se o centro da sua visão for em x: 100, y: 100 e você calculairá a position com um ângulo de 0 graus e um raio de 50, o resultado será x: 150, y: 100

    Se você usa ângulo de 90 graus e raio 50, o resultado será x: 100, y: 150

    É usado aqui na minha biblioteca de graphs, e isso funciona.

    Isso precisa de algumas maths aqui. Você precisa saber se duas linhas são perpendiculaires entre si, a multiplicação desse gradiente de duas linhas deve ser igual a -1 .

    Então

     m1=(770-500)/(540-400)=27/14 

    do mesmo jeito

     m2=(y-770)/(x-540) 

    (x,y) é o ponto que deseja encontrair.

    Agora

     m1*m2=-1 

    Agora temos uma equação. Você precisa de outro, pois há duas necessidades variables ​​paira encontrair

    Você pode obter outro considerando o raio do círculo.

     r=sqrt((540-400)^2+(770-500)^2) 

    Da mesma maneira

     r=sqrl((x-540)^2+(y-770)^2) 

    Agora você tem duas equações e só precisa resolview. Isso lhe dairá dois conjuntos de coordenadas. Uma vez que pode haview -90 e 90 graus.

    Uma maneira elegante de conseguir isso é o uso de numbers complexos, disponíveis aqui , por exemplo.

    Em pseudo-código:

     z = (x_old + I*y_old)*exp(I*angle); x_new = real(z); y_new = imag(z); 

    NOTA: o angle rotation deve estair em radianos. NOTA2: isso pressupõe um círculo centrado em (0,0). Apenas adicione uma mudança se o centro não estiview lá.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.