ângulos no delphi

Delphi

24/01/2004

oi
minha dúvida é relacionada a ângulos
se eu tenho o ponto A na posição X 100 Y 100 e o ponto B na posição
X 200 Y 50 e fizer uma linha lingando estes pontos qual é o angulo desta linha????

Outra dúvida é que se por acaso tiver um botão no ponto A e eu quiser move-lo em ângulo de 45 graus tipo grau por grau so dando o angulo como que faço isso? como vou saber as cordenadas x.y até ele chegar lá?

se alguém souber fico agradecido


Robotizar

Robotizar

Curtidas 0

Respostas

::d::a::m::m::i::t::

::d::a::m::m::i::t::

24/01/2004

cara...

naum sei exataente como fazer isso.... mas tenta usar a trigonometria..

no delphi tem umas funções (sin(), cos().....)...

tenta isso.....

e se der cata um livro de matemática tb...hehe

falow....


GOSTEI 0
Beppe

Beppe

24/01/2004

Uma linha por si só não faz angulo, você precisa de uma segunda linha, que se encontre com a primeira.

Já fiz alguns códigos pra rotacionar, quando achar eu posto.


GOSTEI 0
Robotizar

Robotizar

24/01/2004

essa paradinha da matematica eu sei ...faço mecanica geral no senai e geometria é tudo por lá.... tipo tem q transformar em um triangulo e fazer o teorema de pitagoras pra achar o angulo mais eu queria saber como passar isso pro delphi


GOSTEI 0
Beppe

Beppe

24/01/2004

Tenta isso:

function RotatePoint(const P: TFloatPoint; Angle: Float): TFloatPoint;
begin
  Result.X := P.X * Cos(Angle) - P.Y * Sin(Angle);
  Result.Y := P.X * Sin(Angle) + P.Y * Cos(Angle);
end;


Angle não é 0..360, na verdade eu nem sei qual o domínio disso aí, mas funcionou pro que eu queria. Rotaciona em torno da posição (0, 0). Você precisará fazer um translate nesse ângulo.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

24/01/2004

Tava pesquisando sobre isso aqui no fórum, achei a resposta para o que queria fazer,
então rsolvi colocar a solução aqui..., pelo menso comogo funcionou

Angulo := (ArcTan2((X - 100), (Y - 100))) - pi/2;
//Isso descobre um ângulo passando os valores dos catetos

Panel1.Left := Trunc(100 + Cos(Angulo)*100) - 4;
Panel1.Top := Trunc(100 - Sin(Angulo)*100) - 4;
isso calcula uma nova posição através do ângulo

coloque isso no onmousemove do form, e Math no uses


GOSTEI 0
Marco Salles

Marco Salles

24/01/2004

Vou Sugerir Uma Formula Matematica Simples Para Equacionar a Questão
O Ponto A Possui as Cordenadas : (Xa,Ya)
O Ponto B Possui as Cordenadas : (Xb,Yb)
Para Obertmos o Vou Simplificar em Duas Etapas:


AnguloRd:=ArcTan((Yb-Ya)/(Xb-Xa))===

A Primeira Etapa Se Obtem o Valor Do Angulo Em Radianos, Para Trasformar Este Valor Em Graus, Efetuar a
Segunda Etapa:

AnguloGr:=(360*AnguloRd)/(2*3,14159265359)====> Resposta Em Graus

Onde o AnguloRd:= Angulo Em  Radianos
           AnguloGr:= Angulo Em Graus

Obs:É Claro Que Voces Craques Em Informática que São Podem e Devem Simplificar a Expressão anterior e Coloca-la Em Uma Função

Acredito Porém Que Transformando Radianos Para Graus Em Delphi Voce Deva Ter Um Pequeno Desvio De Arredondamento, Talves Se For o Caso é Mais Conveniente Trabalhar Com Radianos..[/code]


GOSTEI 0
POSTAR