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

  • Nenhuma orientação especificada, e o padrão é horizontal. Esta é uma fonte comum de erros quando as crianças são adicionadas dinamicamente
  • Remoview Espaço Branco indesejável no WebView Android
  • Biblioteca de suporte de material design
  • Android escolha a image da galeria mostrando erro de memory
  • Diferença entre onCreateView e onViewCreated in Fragment
  • Nome de animação desconhecido: decelerateInterpolator
  • 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.

  • Fundo de Android + text + ícone paira um button
  • Usando o AsyncTask paira cairregair imagens no ListView
  • Emblema dynamic em HTML do aplicativo Google Play
  • Android Web Service Tutorial
  • Android - android.os.NetworkOnMainThreadException
  • A import do android.support.v7.app.MediaRouteActionProvider não pode ser resolvida
  • 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.