Movendo um objeto em um caminho circular

26

Eu quero mover um objeto (ponto) em um caminho circular. Como devo alterar as coordenadas X e Y para fazer isso?

Ganapathy C
fonte

Respostas:

54

Você pode fazer isso usando matemática simples:

X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;

(origemX, origemY) é o centro do seu círculo. raio é seu raio. É isso aí.

Isso funciona porque o seno e o cosseno estão matematicamente relacionados ao círculo unitário .

relação de seno e cosseno com o círculo unitário
Crédito da imagem: LucasVB (Trabalho próprio) [Domínio público], via Wikimedia Commons . (Reduzido para 70%.)

Krom Stern
fonte
E se for oval? Ou seja, sem raio definido.
teste
2
@test: Se o oval for orientado por X ou Y, você pode multiplicar a posição do eixo correspondente por um fator adicional. Se você precisar de mais detalhes, faça uma pergunta em separado.
Kromster diz apoio Monica
@Anko: Eu não acho que a animação explique melhor, mas deixe estar, para aqueles que precisam. Convertido para CW.
Kromster diz apoio Monica
@ Kromster, que tal alcançar o mesmo resultado no espaço 3D?
Tomas
14

Você pode usar a equação paramétrica conforme marcado por Krom. Para entender por que usamos essa fórmula, você precisa entender qual é a equação. Esta equação é derivada da equação paramétrica do círculo .

Considerando que o círculo é desenhado com o centro na origem (O), como mostrado no diagrama abaixo Círculo

Se tomarmos um ponto "p" na circunferência do círculo, tendo um raio r.

Seja o ângulo feito por OP (Origem para p) seja θ. Seja a distância de p do eixo x seja y Deixe a distância de p do eixo y seja x

Usando as premissas acima, obtemos o triângulo como mostrado abaixo: triângulo

Agora sabemos que cos θ = base / hipotenusa e pecado θ = perpendicular / hipotenusa

que nos dá cos θ = x / r e sin θ = y / r

:: x = r * cos θ e y = r * sin θ

Mas se o círculo não está na origem e sim em (a, b), podemos dizer que o centro do círculo é deslocado

a unidades no eixo x
b unidades no eixo y
Então, para esse círculo, podemos alterar a equação paramétrica de acordo, adicionando a mudança no eixo xey, fornecendo as seguintes equações:

x = a + (r * cos θ)
y = b + (r * sin θ)


Onde a & b são as coordenadas x, y do centro do círculo.

Portanto, encontramos xey as coordenadas do ponto na circunferência do círculo com raio r

fer0x
fonte
2
Obrigado, resposta muito boa e breve para este problema, polegares para cima
Ali.Ghodrat 18/18
5

Há outro truque, no qual você usa as fórmulas sin (x + a) e cos (x + a), e isso permite que você calcule sin (a) e cos (a) - um ser o ângulo pelo qual você deseja mover da sua posição atual - apenas uma vez e faça simplesmente multiplicação e acréscimos a cada etapa.

sen (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.

Obviamente, isso assume velocidade angular constante.

Cuidado com a precisão aritmética limitada, no entanto. Eu observei no passado o movimento "circular" implementado dessa maneira que desenharia uma espiral como resultado de arredondamentos ocasionais repetidos ao longo do tempo. Pode ser necessário redefinir a posição para (x0, y0) após cada rotação.

sylvainulg
fonte