Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2010
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Unhappy Calculo de trayectorias... Me quede estancado :(

Saludos a todos, estoy haciendo un pequeño programa para calcular y graficar la trayectoria de un proyectil con arrastre del viento, no soy fisico, y hace ya tiempo que deje de programar pero estoy en la tarea de poder graficar esta ecuacion y la verdad me quede atorado no se en donde esta mi problema, las ecuaciones son las siguientes:

t =0.1Segundos
Vo=240m/s
m = 0.0025kg
D = 0.000016788592601
Vx = Vx= V0*Coseno(48) = 160.59
Vy= Vy= V0*Seno(48) = 178.35
g =9.91

1.- Calcular la constante de proporcionalidad para el proyectil específico.

D=pC(A) /2 (Supongamos que ya tengo este valor calculado que es constante)

2.- Calcular la aceleración del proyectil en X y Y

Ax=-(D/m)*V*Vx Ay=-g-(D/m)*V*Vy

3.- Calcular los componentes de velocidad del proyectil en los planos X y Y utilizando los valores obtenidos de los componentes de aceleración.

Vfx= Vx+Ax*t Vfy= Vy+Ay*t

4.- Calcular los valores de la posición inicial de proyectil en el plano X y Y.

X= Vx*t+(0.5*Ax)*t2 Y= Vy*t+(0.5*Ay)*t2

5.- Calcular la posición actual o subsecuente de las coordenadas en X, Y.

PosicionActualX= X + Vx*t+(0.5*Ax)*t2

PosicionActualY= Y + Vy*t+(0.5*Ay)*t2


(Es decir tomamos el valor de la X y Y calculada anteriormente y la sumamos a la que estamos calculando).

6.- Incrementamos el tiempo

7.- Repetimos el proceso nuevamente los pasos del 2 al 6 hasta que el proyectil caiga al suelo

No me lo van a creer pero llevo 4 dia aprovechando las pseudo vacaciones en tratar de resolver esto y nadamas no me sale ya repeti el programa desde cero unas cuatro veces y siempre me da resultados diferentes, si alguno de ustedes se acuerda de sus clases de fisica de la universidad a ver si me puede hechar la mano para componer mi codigo porque ya no le encuentro forma ( quienes lo revisen veran que es una maraña )

Anexo mi codigo por si alguien me pued orientar, se los agradeceria mucho, saludos y gracias de antemano
Archivos Adjuntos
Tipo de Archivo: zip CalculoTrayectoriaArrastre.zip (6,7 KB, 8 visitas)
Responder Con Cita
  #2  
Antiguo 05-04-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Tampoco soy físico, sin embargo creo que esto es mejor que lo calcules utilizando vectores y matrices. Es decir, crea una unidad que puedes llamar "Mates3D" o similar y creas una o dos clases: una para vectores 3D y otra para matrices cuadradas de orden 4. Por ejemplo, para el vector puedes definirlo así:
Código Delphi [-]
TVector3D = CLASS
PRIVATE
  fx, fy, fz: REAL;
PUBLIC
(* Método para normalizar el vector (vector equivalente de longitud 1). *)
   PROCEDURE Normaliza;
(* Método para sumar vectores. *)
   PROCEDURE Suma (aOtroVector: TVector3D);
(* Método para calcular la longitud del vector. *)
   FUNCTION Longitud: REAL;
(* Método para multiplicar un escalar al vector. *)
   PROCEDURE ProductoEscalar (aEscalar: REAL);
(* Método para producto cruzado (se usa para calcular la normal de un plano, por ejemplo). *)
   FUNCTION ProductoCruzado (aVector: TVector3D): TVector3D;

  PROPERTY x: REAL READ fx WRITE fx;
  PROPERTY y: REAL READ fy WRITE fy;
  PROPERTY z: REAL READ fz WRITE fz;
END;

Y para la matriz:
Código Delphi [-]
TMatriz4 = CLASS
PRIVATE
   fComponentes: ARRAY [1..4, 1..4] OF REAL;

   FUNCTION AsignaComponente (m, n: INTEGER; v: REAL);
   PROCEDURE ObtieneComponente (m, n: INTEGER): REAL;
PUBLIC
(* Calcula el determinante. *)
   FUNCTION Determinante: REAL;
(* Multiplica ambas matrices. *)
   FUNCTION MultiplicaMatriz (aMatriz: TMatriz4): TMatriz4;
(* Multiplica la matriz y el vector (asume que el componente w del vector es 1). *)
   FUNCTION MultiplicaVector (aVector: TVector3D): TVector3D;

   Componente[m, n: INTEGER]: REAL READ ObtieneComponente WRITE AsignaComponente;
END;

Etcétera. La implementación ya te la dejo, porque son matemáticas "básicas". También has de tener en cuenta que puede que falte alguna operación, y también que quizá haya que cambiar parámetros de las que he puesto, porque lo he hecho de memoria y sin pensar mucho.

La idea es que la mayor parte de las fórmulas físicas son más fáciles de "traducir" utilizando vectores y matrices, puesto que las propias fórmulas físicas los utilizan.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 06-04-2010
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Muchas gracias mi estimado Ñuño Martínez por la respuesta mira como comente tambien hace ya varios años deje de programar y la verdad los años no pasaron en valde

Mira si no entendi mal lo que me propones en tu ejemplo se ve que tiene una pinta mucho mejor y mas profecional a la maraña de codigo que yo hice

Solo que si no me equivoco la forma en que me lo panteste es como para graficarlo en 3D oasea en ejes X,Y y Z pero pues la formula que uso es para el calculo de trayectorias en 2D con arrastre del viento:

http://www.team2834.com/documents/Pr...resistance.pdf

Ya hice tambien el calculo de trayectorias ideales sin arrastre y pues lo hice similar al codigo que puse y en ese caso si funciono porque los datos eran constantes y solo hace unas iteraciones muy simples y pues con detallitos pero quedo funcionando.

Intente hacer lo mismo pero nadamas no se pudo

La verdad voy a ponerme a ver libros de suma de vectores y matricez porque como comentas es lo ideal pero pues la verdad ya no me acuerdo de mis dias de bachillerato y ademas que mi oficio o carrera actua ya muy poco tiene que ver con programacion y pues fisica solo basica muy basica

Bueno un saludo si alguien mas tiene por ahi algun comentario se los agradecere saludos a todos
Responder Con Cita
  #4  
Antiguo 06-04-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Hola de nuevo.

Sí, el ejemplo que te puse es en 3D, pero para hacer cálculos 2D también pueden utilizarse vectores y matrices. Además es "más fácil" porque tienes un orden menos (es decir, los vectores tienen sólo dos componentes y las matrices son cuadradas de orden 3 ). Sé que al principio puede asustar un poquito, pero tampoco es tan difícil.

Mira: buscando en Internet he encontrado esta página web donde hacen una extensa explicación de matrices. Si tienes en cuenta que un vector no es más que una "matriz fila", lo tienes.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 07-04-2010
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Muchas gracias Ñuño voya checar la pagina que me mandaste espero poder resolverlo pronto ya les contare como me fue
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
MySQL Ayuda. Estoy estancado RebeccaGL MySQL 10 16-10-2008 16:31:58
Validar TEdit para que no quede vacio MAXIUM Varios 4 29-03-2008 02:12:16
Speed Button que se quede down como en emule Nbull Varios 5 01-02-2006 10:20:34
Clic a un tbutton y que no se quede el foco niñotaliban Varios 22 18-11-2005 20:45:11
Estoy estancado pepelu1975 Conexión con bases de datos 2 20-02-2004 18:14:54


La franja horaria es GMT +2. Ahora son las 20:29:28.


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
Copyright 1996-2007 Club Delphi