Mostrando entradas con la etiqueta Automatización. Mostrar todas las entradas
Mostrando entradas con la etiqueta Automatización. Mostrar todas las entradas

Chipmunk 2D motor de física bidimensional






Chipmunk 2D es un motor de física bidimensional codificado en C++, que podemos aplicarlo en Delphi utilizando la unit chipmunk.pas que viene incluida en el zip.


Para cada partícula incorpora dos tipos de estructuras: una de ellas guarda su forma (esfera, segmento o polígono) y posición  y la otra almacena la forma en la que interactúa con su entorno (velocidad, elasticidad y fricción), lo que hace que genere simulaciones altamente realistas, como podrán comprobar  en el exe que adjunto.


Mi recomendación es que reduzcan el radio de las esferas dentro del procedure ImgMouseMove hasta hacerlo = 1 y que jueguen con el ratón haciendo clic y moviéndolo para generar miles de esferas.










Enlace | Codigo fuente









         


author:            Scott Lembcke  

 mail:              slembcke@gmail.com     


                                           


 chipmunk version:  5.3.2                  


 license:           MIT                    


 chipmunk homepage:                        


 http://code.google.com/p/chipmunk-physics/


                                           


 header version:    0.99 beta 2            


 date:              2010.12.09             


 header homepage:                           


 http://code.google.com/p/chipmunk-pascal/ 


                                           


-----------
cabeceras escritas por -------------


                                           


           Kemka Andrey aka Andru           


                                           


 mail: dr.andru@gmail.com                  


 JID: 
dr.andru@googlemail.com             


 ICQ:  496929849                           


 www:  http://andru-kun.inf.ua      












Lotus Notes con Delphi

Abre la base de datos de Lotus Notes  names.nsf y muestra su libro de direcciones.






unit
Unit1;





interface





uses


Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,


Dialogs,
Domino_TLB, Menus, ComCtrls;


const


PASSWD =
'ur70';


type


TForm2 =
class(TForm)


  
TV_INFO: TTreeView;


  
MainMenu1: TMainMenu;


  
File1: TMenuItem;


  
Create1: TMenuItem;


  
Init1: TMenuItem;


  
AddressBook1: TMenuItem;


  
Scan1: TMenuItem;


  
procedure Create1Click(Sender: TObject);


  
procedure Init1Click(Sender: TObject);


  
procedure Scan1Click(Sender: TObject);


private


  
{ Private declarations
}


public


  
{ Public declarations
}


end;





var


Form2:
TForm2;


Session:
TNotesSession;


implementation





{$R
*.dfm}





procedure TForm2.Create1Click(Sender: TObject);


begin


Session
:= TNotesSession.Create(
nil);


end;





procedure TForm2.Init1Click(Sender: TObject);


begin


Session.Initialize(PASSWD);


end;








Abre la base de datos names.nsf y muestra el libro de direcciones





procedure TForm2.Scan1Click(Sender: TObject);


var


NotesDb:
NotesDatabase;


addrBook: NotesDatabase;


People,
People2: NotesView;


Person,
Person2: NotesDocument;


View:
NotesView;


Item:
NotesItem;


AddrBooks: OleVariant;


Views:
OleVariant;


Items:
OleVariant;


x, y, z:
integer;


view_name: string;


tn, tc:
TTreeNode;


begin


NotesDb
:= Session.GetDatabase(
'',
'names.nsf', False);


AddrBooks := Session.AddressBooks;


for
x :=
0 to VarArrayHighBound(AddrBooks,
1) -


  
VarArrayLowBound(AddrBooks,
1)
do


begin


  
addrBook := NotesDatabase(IUnknown(AddrBooks[x]));


  
if
(addrBook.IsPrivateAddressBook)
then


  
begin


    
addrBook.Open;


  
end


  
else


    
addrBook :=
nil;


  
if
(addrBook <>
nil)
then


  
begin


    
Views := addrBook.Views;


    
for
y :=
0 to VarArrayHighBound(Views,
1) -


      
VarArrayLowBound(Views,
1)
do


    
begin


      
View := NotesView(IUnknown(Views[y]));


      
view_
name
:= View.
Name;


      
tn := tv_info.Items.AddNode(
nil, nil, view_name, nil, naAdd);





      
if
copy(view_
name, 1,
1) = '$' then


        
view_
name
:= copy(view_
name, 2,
length(view_
name) - 1);


      
people := addrBook.GetView(view_
name);


      
person := people.GetFirstDocument;


      
if
Person <>
nil
then


      
begin


        
Items := Person.Items;


        
for
z :=
0 to VarArrayHighBound(Items,
1) -


           VarArrayLowBound(Items, 1) do


        
begin


           Item := NotesItem(IUnknown(Items[z]));


           tc := tv_info.Items.AddChild(tn,
Item.
Name);





           people := addrBook.GetView(view_name);


           person := people.GetFirstDocument;





           while (Person <> nil) do


           begin


             try


               try


                 tv_info.Items.AddChild(tc,
Person.GetFirstItem(Item.
Name).Text


                   {Item.Text});


               except


               end;


             finally


               Person :=
People.GetNextDocument(Person);


             end;


           end;


        
end;


      
end;


    
end;





  
end;


end;


end;





end.


Detección de colisiones 2D



El componente TRSCollisionMap implementa las clases necesarias para la detección de colisiones en objetos 2D, así que si se animan a programar un juego aquí tienen parte del trabajo hecho.


Por lo que he visto en la documentación es útil en el caso de que no existan muchos objetos moviéndose en pantalla.



Código fuente y ejecutable:

http://www.riversoftavg.com/Files/RSCollisionDetection.zip









Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...