ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda com TPoint

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
richard1994x
Aprendiz
Aprendiz


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 162

MensagemEnviada: Qui Jan 12, 2012 3:54 pm    Assunto: Ajuda com TPoint Responder com Citação

Tem uma função em Canvas
Código:
Canvas.PolyBezier


Alguem sabe como usar?

Já tentei
Código:
var
tp:Tpoint;
begin
tp.x:=500;
tp.y:=400;
Canvas.PolyBezier(tp);
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
richard1994x
Aprendiz
Aprendiz


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 162

MensagemEnviada: Qui Jan 12, 2012 5:57 pm    Assunto: Responder com Citação

Gostaria que começa-se pelo x=500 y=500, passase por x=550 y=450 e termina-se em x=700 y=500.

Tipo uma parabola.

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 12, 2012 9:36 pm    Assunto: Responder com Citação

Pelo que vi para a primeira curva são necessários 4 pontos.
Experimente mais ou menos desta forma:

Código:
var
  ArrayPontos: array[0..3] of TPoint;
begin
ArrayPontos[0].X := 10;
ArrayPontos[0].Y := 500;
ArrayPontos[1].X := 350;
ArrayPontos[1].Y := 250;
ArrayPontos[2].X := 500;
ArrayPontos[2].Y := 100;
ArrayPontos[3].X := 750;
ArrayPontos[3].Y := 550;
Canvas.PolyBezier(ArrayPontos);


Espero que seja útil.


Editado pela última vez por imex em Qua Out 04, 2023 11:35 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
richard1994x
Aprendiz
Aprendiz


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 162

MensagemEnviada: Sex Jan 13, 2012 8:18 pm    Assunto: Responder com Citação

Mais que faça a parabola em um angulo de 45 graus, alguem me da uma luz

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Jan 15, 2012 1:36 pm    Assunto: Responder com Citação

Eis uma forma de utilização de TPoint e TRect:

Código:

var
   XY: TPoint;
   MyRect: TRect;
begin
     XY := Point(1, 1);
     MyRect := Rect(1, 10, 0, 0);
     ShowMessage(Format('%d,%d', [XY.x, XY.y]));
     ShowMessage(Format('%d,%d, %d, %d', [MyRect.Left, MyRect.Right, MyRect.Top, MyRect.Bottom]));

Assim o que o Imex escreveu poderia ficar assim:
var
  ArrayPontos: array[0..3] of TPoint;
begin
{
ArrayPontos[0].X := 10;
ArrayPontos[0].Y := 500;
ArrayPontos[1].X := 350;
ArrayPontos[1].Y := 250;
ArrayPontos[2].X := 500;
ArrayPontos[2].Y := 100;
ArrayPontos[3].X := 750;
ArrayPontos[3].Y := 550;
Canvas.PolyBezier(ArrayPontos);
}

ArrayPontos[0] := Point(10, 500);
ArrayPontos[1] := Point(350, 250);
ArrayPontos[2] := Point(500, 100);
ArrayPontos[3] := Point(750, 550);






bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Dom Jan 15, 2012 3:10 pm    Assunto: Responder com Citação

Para obter um ângulo aproximado de 45 graus é necessário ajustar os pontos passados como parâmetro.
Aproveitando a sugestão do Johnny, experimente desta forma:

Código:
var
   ArrayPontos: array[0..3] of TPoint;
begin
ArrayPontos[0] := Point(500, 500);
ArrayPontos[1] := Point(550, 450);
ArrayPontos[2] := Point(600, 400);
ArrayPontos[3] := Point(700, 500);
Canvas.PolyBezier(ArrayPontos);


Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
richard1994x
Aprendiz
Aprendiz


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 162

MensagemEnviada: Dom Jan 15, 2012 5:31 pm    Assunto: Responder com Citação

Obrigado a todos por estarem me ajudando, estou criando um projecto que me pediram no curso e não sei bem como fazer.

É sobre Lançamentos de Projéteis.

Como o amigo imex falou:
Citação:
Para obter um ângulo aproximado de 45 graus é necessário ajustar os pontos passados como parâmetro.


E como faço pro angulo ser igual ao o que estiver no Edit? A distancia é a mesma so o que muda é o angulo e mostre a nova trajetoria da parabola.



Código no button:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
pontos: array[0..3] of TPoint;
begin
Canvas.MoveTo(500,500);
Canvas.LineTo(480,500);
Canvas.MoveTo(500,500);
Canvas.LineTo(520,500);

Canvas.MoveTo(500,500);
Canvas.LineTo(500,520);
Canvas.MoveTo(500,500);
Canvas.LineTo(500,480);

pontos[0]:=Point(500, 500);
pontos[1]:=Point(550, 450);
pontos[2]:=Point(600, 400);
pontos[3]:=Point(700, 500);
Canvas.PolyBezier(pontos);
end;


Quem quiser baixar:
http://www.mediafire.com/?48pjdsrvi3z264m
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Seg Jan 16, 2012 10:07 am    Assunto: Responder com Citação

O que que eu não estou entendendo é o seguinte
Quem garante que esse pontos que voce traçou fazem parte de uma parábola
Esteticamente se comporta como tal , mas sera que segue a risca a equação de
uma ??? O Fato é que , dois pontos não colineares definen uma reta .
Mas dois , tres , quatro , cinco não definen uma parábola

Um Ponto P(X,Y) e uma Tangente , definem inumeras parábolas ;; Não
necessariamente uma

Veja o Exemplo da equação

Y=ax² + bx + c ..
Dado P(5,5) pertence a esta parábola e que ela é tangente em P(5,5)
formando um Angulo de 135° .. (135 = 90 + 45°)

A pergunta é .. So exsite uma parabola nesta condiçoes ????

Se a equação é

y=ax² + bx +c .. Sabemos que a tangente (Derivada) em todos os pontos é

Y' = 2ax + b ***** Derivada da equação ***

Em P(5,5) o Angulo é igual a 135° . Logo a Tag(135°) é Menos Um

-1 = 2a.5 + b

10a + b = -1 ***************

Existem Infinitos a e b qua satisfazem esta condição

Supor a=1 -->> b=-11 logo calculamos C

y=ax²+ bx + c
5 = 25 - 11.5 + c
5 = 25 - 55 + c
c=35

Logo a parábola y=x² - 11x + 35 é Uma parábola que satisfaz
Passa pelo ponto P(5,5) e é tangente neste ponto com angulo de 135°

Mas existem outras , basta variar o valor de a e de b

10a + b = -1 ***************

supor 10a=-1 -->> b=-Zero logo calculamos C

y=ax²+ bx + c

Y=(-0,1)x² + c
5 = (-0,1);25 + c
5 = -0,25 + c
c=7,5=15/2

Logo a parábola y= -0,1.x² + 7,5 é Uma parábola que satisfaz
Passa pelo ponto P(5,5) e é tangente neste ponto com angulo de 135°

Enfim , tudo isto colocar em Delphi não é problema , cansativo , mas
nada desconhecido .. O que eu acho que falta mais condiçoes para
amarrar a parábola sendo unica , não so o Ponto inicial e o Angulo

A idéia é determinar a equação y=ax² + bx + c e ai por simetria voce
cria os outros quatro pontos para serem utilizados na funçaõ PolyBezier
e desenhar o gráfico
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB