 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
richard1994x Aprendiz

Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 162
|
Enviada: Qui Jan 12, 2012 3:54 pm Assunto: Ajuda com TPoint |
|
|
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 |
|
 |
richard1994x Aprendiz

Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 162
|
Enviada: Qui Jan 12, 2012 5:57 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Jan 12, 2012 9:36 pm Assunto: |
|
|
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 |
|
 |
richard1994x Aprendiz

Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 162
|
Enviada: Sex Jan 13, 2012 8:18 pm Assunto: |
|
|
Mais que faça a parabola em um angulo de 45 graus, alguem me da uma luz
 |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Dom Jan 15, 2012 1:36 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Dom Jan 15, 2012 3:10 pm Assunto: |
|
|
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 |
|
 |
richard1994x Aprendiz

Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 162
|
Enviada: Dom Jan 15, 2012 5:31 pm Assunto: |
|
|
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 |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Seg Jan 16, 2012 10:07 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|