Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Circunferencia y orbita (https://www.clubdelphi.com/foros/showthread.php?t=47776)

Cecilio 06-09-2007 20:07:27

Circunferencia y orbita
 
Hola.

Estoy haciendo un pequeño juego. Y me gustaría representar un planeta en torno a su sol. (en movimiento)

El problema es que hace tiempo hice una unidad de trigonometría, pero no recuerdo como se hacia para representar esa órbita.
(también se puede usar para representar un reloj analógico).

Imagino que en función del radio y la velocidad, se hacia la representación. Pero no recuerdo.

¿ alguien puede orientarme al respecto ?

paldave 06-09-2007 20:28:15

Para encontrar el punto donde debes colocar el planeta usas:
Código Delphi [-]
Point.x := Centro.X + Round (Radio * Cos (Angulo));
Point.y := Centro.Y + Round (Radio * Sin (Angulo));
Luego para darle movimiento y velocidad creas un Timer que vaya aumentando el Angulo.
Saludos.

Delphius 06-09-2007 20:36:18

Cita:

Empezado por paldave (Mensaje 228964)
Para encontrar el punto donde debes colocar el planeta usas:
Código Delphi [-]Point.x := Centro.X + Round (Radio * Cos (Angulo));
Point.y := Centro.Y + Round (Radio * Sin (Angulo));

Luego para darle movimiento y velocidad creas un Timer que vaya aumentando el Angulo.
Saludos.

Bueno, no es por hechar leña al fuego, pero para el caso de que la órbita sea una circunsferencia esta bien. El problema está en el hecho de que las órbitas son elípticas.

Creo que se podría obviar el hecho "real" y trabajar con una órbita circular.

Todo dependerá de lo que considera paldave.

Cita:

Empezado por Cecilio (Mensaje 228952)
Hola.

Estoy haciendo un pequeño juego. Y me gustaría representar un planeta en torno a su sol. (en movimiento)

El problema es que hace tiempo hice una unidad de trigonometría, pero no recuerdo como se hacia para representar esa órbita.
(también se puede usar para representar un reloj analógico).

Imagino que en función del radio y la velocidad, se hacia la representación. Pero no recuerdo.

¿ alguien puede orientarme al respecto ?

Cecilio, no se como decirte sin que lo tomes a mal, pero... si quieres usar la libreria que hiciste, poco y nada podemos ayudarte en ello si desconocemos como funciona y/o está escrita dicha unidad.

Si puedes ser más explícito y darnos mejores detalles te podemos ser de ayuda.

Saludos,

Delphius 06-09-2007 20:44:14

Y bueno, llendo a la realidad, tenemos que considerar:

1. Leyes de Kepler
2. Ley de Gravitación Universal, que se desprende de las leyes de kepler.

Si se desea un modelo lo más exacto a la realidad... Habrá que repasar lo visto en Física en la secundaria.

Saludos,

Ñuño Martínez 06-09-2007 20:57:58

Tal vez te interese este artículo, que aunque está en inglés y los ejemplos son en C los conceptos matemáticos sirven igual.

Por cierto, ¿estás utilizando Allegro.pas? Lo digo porque dentro de poco (un par de semanas o así) se va a publicar la cuarta beta con mogollón de correcciones y se necesitarán probadores. :cool::D

[edit]

Por cierto, que para hacer una órbita elíptica basta con utilizar dos radios:
Código Delphi [-]
Point.x := Centro.X + Round (Radio.X * Cos (Angulo));
Point.y := Centro.Y + Round (Radio.Y * Sin (Angulo));

paldave 06-09-2007 21:01:04

Delphius: no sé que quisiste decirme con:
Cita:

Paldave, no se como decirte sin que lo tomes a mal, pero... si quieres usar la libreria que hiciste, poco y nada podemos ayudarte en ello si desconocemos como funciona y/o está escrita dicha unidad.
:confused:
yo no soy el que está planteando la duda, solo me limité a decirle al compañero Cecilio como encontrar un punto de la órbita circular conociendo el centro y el radio de dicha órbita. Me parece innecesario aclarar más como funciona esto, ya que el parámetro Angulo se autodefine, Centro y Point son del tipo TPoint, Radio es del tipo Integer.

Delphius 06-09-2007 21:05:54

Cita:

Empezado por paldave (Mensaje 228981)
Delphius: no sé que quisiste decirme con:
:confused:
yo no soy el que está planteando la duda, solo me limité a decirle al compañero Cecilio como encontrar un punto de la órbita circular conociendo el centro y el radio de dicha órbita. Me parece innecesario aclarar más como funciona esto, ya que el parámetro Angulo se autodefine, Centro y Point son del tipo TPoint, Radio es del tipo Integer.

Perdón. Mil disculpas. Quise poner Cecilio pero se me pasó el Copy/Paste.
Mil... mil disculpas. Ya lo edito.

Saludos,

Cecilio 06-09-2007 21:20:56

Ante todo Gracias por las respuestas.

Delphius Por ahora voy a crear las órbitas circulares, porque aún no le tengo cogido el truquillo. Al no usar Ascención y declinación, los planetas colisionarían en órbitas elípticas pequeñas, mientras que al ser circulares no hay ese problema. De todos modos, el eje de este pequeño juego no es hacer una representación muy fiel de los sistemas planetarios. Curiosamente, esta semana descargué para recordar las 3 leyes de Kepler.

ñuño hestoy viendo la librería que me has recomendado, no tenia ni idea de que existiera. Voy ponerme en contacto para probarla. Y gracias por la forma de representar las orbitas elípticas. Las usaré en la siguiente fase.

paldave Muchas gracias, voy a usar tu código para esta primera versión.

Tampoco estoy muy puesto en delphi, así que preguntaré. :)

Cecilio 06-09-2007 21:49:50

Porcierto como se usa Point ?

Yo estoy usanto Tshape, porque no tengo practica aún con los dibujos de gráficos.

paldave 06-09-2007 21:55:12

Nos olvidamos avisarte que Angulo está expresado en Radianes.
Para convertirlo desde grados utiliza
Código Delphi [-]
Angulo:=DegToRad(Grados)
DegToRad se encuentra en Math.pas, así que no olvides incluirla en uses

seoane 06-09-2007 21:57:12

Cita:

Empezado por Cecilio (Mensaje 229010)
Yo estoy usanto Tshape, pero da unos saltos grandiiiisimos.

El ángulo lo debes expresar en radianes y no en grados.

Y por si no te acuerdas ;) : 180º = pi radianes

paldave 06-09-2007 22:16:43

Point es una variable del tipo TPoint que se utiliza así:
Código Delphi [-]
procedure Form1.Button1Click;
var Point:TPoint;
begin
  Point.x:=...
  Point.y:=...
  Form1.Canvas.Pixels[Point.x,Point.y]:=clBlue;
end;
o
Código Delphi [-]
procedure Form1.Button1Click;
var x,y:Integer;
begin
  x:=...
  y:=...
  Form1.Canvas.Pixels[x,y]:=clBlue;
end;
El objeto Shape no es el más adecuado porque no tiene un canvas. Utiliza otro. En el ejemplo dibujé directamente sobre el Form.

Cecilio 06-09-2007 22:34:14

Ahora va Genial.

Viendo los saltos que daba, miré el artículo que me recomendó ñuño y vi el ejemplo en c, así que pude resolverlo, pero sin caer en que eran radianes.

Ahora he incorporado los grados, con la función que me recomendais.

Va perfecto. (aunque los puntos no se dibujan, aunque no me preocupa mucho, ya que usaré Shape o un bitmap.)

sois mis ídolos. Gracias por la ayuda.:)


La franja horaria es GMT +2. Ahora son las 22:12:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi