Showing posts with label 2D. Show all posts
Showing posts with label 2D. Show all posts

Thursday, 18 November 2010

2d Physics with Delphi

I'm modelling a series of objects with some physics and mathematics and I found interesting to talk about the library I am using: Delphi APE. This fantastic library available for Delphi  (Windows) and Lazarus (Linux) allows very simple task as powerful as gravity, collision processes, grouping behaviour and general process. Great the job done by Alex cove and others like Vincent and Jeremy who helped him to make the conversion to Delphi.
This great library which I'm testing with Delphi 2010 is very easy to use and it shows a very interesting example combining different elements and letting them play. You can download the library from here, and test the different modelled items. The results are very well done and with simple steps we can achieve things like this:

Another interesting library is the one done by Algoryx called Phun.:


Related articles:

Wednesday, 12 August 2009

Desarrollo de Videojuegos con Delphi mediante Asphyre

Asphyre es un Framework Open Source para el desarrollo de videojuegos. El proyecto lo podemos descargar de la web de AfterWarp, una web dedicada al desarrollo de videojuegos utilizando Delphi o compiladores Free Pascal (Lazarus). El Proyecto Asphyre desarrollado por Yuriy Kotsarenko integra de forma sencilla la utilización de DirectX y OpenGL sin tener que tocar ninguno de éstos componentes. Podemos crear tanto escenários en 2D como en 3D, y la instalación de su framework es muy sencilla. Si nos descargamos la última versión de su Framework, Asphyre Sphinx, podremos ejecutar los ejemplos que vienen con la versión. Para la instalación de la librería, tenemos que dirigirnos a Tools -> Options, y en el nodo Environment Options -> Delphi Option -> Library - Win32, nos situamos en Library Path, y añadimos la siguiente ruta en la librería: C:\Asphyre\Source.

Una vez hecho ésto, podemos abrir cualquier ejemplo del componente y ejecutarlo para ver el resultado de la utilización de Asphyre.

Aquí os dejo un manual muy interesante de la utilización de Asphyre desde Developpez.com, aunque está en francés, se entiende bastante bien!.

Además, encontraremos un videojuego llamado Hasteroids, que está bastante bien:


Si miras en la carpeta "Tools" del Framework, encontraréis una utilizades muy interesantes hechas por el mismo autor y que ayudan con el desarrollo de diversos aspectos de los gráficos, ya sea la elección de un color o renderizar una fuente, aquí os dejo la lista de programas y alguna captura de pantalla:
  • AsphyreManager
  • ColorSel
  • FastTile
  • FontTool
  • MigrationTool
  • ModelConv



Friday, 5 June 2009

Dibujando Polígonos con Delphi (Tcanvas)

Aquí os dejo una de las aplicaciones que hice para dibujar polígonos a partir de un número de aristas. Utilizando el canvas de un TImage, podemos hacer los dibujos que queramos. La aplicación se llama Thundax DrawPolygon, y podemos hacer multitud de polígonos (hasta 60 aristas), y dejo el código fuente para ver como hago los cálculos de los puntos y sus diferentes conexiones:


Como podéis observar, podemos seleccionar el número de puntos a dibujar, y si queremos dibujar todas las conexiones o no. De esta manera nos aparecen imágenes tan bonitas como la última. Espectacular, no?

Aquí dejo el código fuente de la implementación de los puntos y su dibujo:




var
Form3: TForm3;
edges: array of TPoint;

implementation

{$R *.dfm}

procedure TForm3.DrawRectangle(image1: TImage; BackGroundColor: Integer; RectangleColor: integer);
begin
image1.Canvas.Brush.Style := bsSolid;
image1.Canvas.Brush.Color := BackGroundColor;
image1.Canvas.Pen.Width := 3;
image1.Canvas.Pen.Color := RectangleColor;
image1.Canvas.Rectangle(0, 0, image1.Width, image1.Height);
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
DrawRectangle(polygon, clBlack, clLime);
end;

procedure TForm3.DrawLine(image1: TImage; point1: TPoint; point2: TPoint; colorLine: integer);
begin
image1.Canvas.Pen.Width := 1;
image1.Canvas.Pen.Color := colorLine;
image1.Canvas.MoveTo(point1.x, point1.y);
image1.Canvas.LineTo(point2.x, point2.y);
end;

procedure TForm3.DrawPoint(image1: TImage; point: TPoint; colorPoint: integer);
begin
image1.Canvas.Pen.Color := clyellow;
image1.Canvas.Pen.Width := 2;
image1.Canvas.Pie(point.x - 3, point.y - 3, point.x + 3, point.y + 3, 1, 1, 1, 1);
end;

procedure TForm3.DrawPolygon(image1: TImage; numberPoints: integer);
var
j, i, omega, rad, Offset: Integer;
Center: TPoint;
begin
setlength(edges, numberPoints + 1);
Offset := 20; //Pixeles de margen
Center := Point(image1.Height div 2, image1.Width div 2);
rad := Center.x - Offset;
omega := 360 div numberPoints;
DrawRectangle(image1, clBlack, clLime);
for i := 1 to numberPoints do
begin
edges[i] := Point(Center.y + trunc(rad * cos(omega * i * ((2 * Pi) / 360))),
Center.x + trunc(rad * sin(omega * i * ((2 * Pi) / 360))));
DrawPoint(image1, edges[i], clyellow);
end;

if not CheckBox1.Checked then
begin
for i := 1 to numberPoints - 1 do
DrawLine(image1, edges[i], edges[i + 1], cllime);
DrawLine(image1, edges[numberPoints], edges[1], cllime);
end
else
begin
for i := 1 to numberPoints do
for j := 1 to numberPoints do
DrawLine(image1, edges[i], edges[j], cllime);
end;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
DrawPolygon(polygon, cxSpinEdit1.value);
end;




A partir del centro, creo los puntos equidistantes con el incremento de un ángulo Omega, y voy pintando los puntos. Una vez los tengo, en función de si tengo activada la conexión de puntos, conecto con líneas cada uno de los puntos, sino solo conecto los puntos entre si llegando a aproximarme a un círculo.

Monday, 27 April 2009

Convex Hull

Convex Hull (envoltorio convexo), consiste en buscar el menor polígono convexo H por lo que cada punto X1, X2, Xn, está a un lado del polígono H o en su interior.

Existen muchas implementaciones de este sistema, pero se utiliza mucho en el reconocimiento de patrones, procesamiento de imágenes, estadística, sistemas de información geográfica, etc.

  • Diferentes implementaciones:
Podemos encontrar en la red, diversas implementaciones de los algoritmos más conocidos del Convex Hull, en diversos lenguajes de programación, Delphi, Java, C/C++, Matlab, etc. Aquí os dejo varios proyectos abiertos que intentan resolver el Convex Hull en 2D y alguno en 3D.

FastGeo 5.01
FastGeo, es una librería desarrollada en Delphi por Arash Partow. Contiene una amplia gama de algoritmos optimizados de geometría computacional y diversas rutinas para diferentes tipos de operaciones geométricas como primitivas, cálculos hull, triangulación, rotaciones, etc.
FastGeo ofrece una interfície para primitivas geométricas y rutinas complejas usando Object Pascal.

Su instalación es muy simple. Primero tenemos que descargar la librería desde este enlace: FastGeo Library Source Code, y también descargamos FastGeo Graphical Interface y FastGeo Convex Hull Demonstration. Una vez descargados, tenemos que crear un package e incluir los ficheros de la librería y de la interfície gráfica. Una vez instalado el Package, abrimos el convex Hull demonstration, y lo iniciamos. Luego podremos ver la aplicación, iniciar un test y calcular el convex Hull:


Fast Convex Hull Algorithm
Esta implementación creada en matlab, nos muestra un algoritmo muy rápido y eficiente capaz de calcular el envoltorio convexo en 2D. Esta implementación la podemos encontrar en Matlab Central de la mano de Luigi Giaccari. Podéis descargar el algoritmo directamente desde este enlace: ConvHull2D.m.

Java Convex Hull
Esta implementación sale de la Universidad de Lethbridge (Canada), de las manos del Dr. Stephen Wismath. Está hecha en un applet, y podemos crear los puntos manualmente y ver la ejecución paso a paso del algoritmo, ya sea por fuerza bruta (analizando todos los puntos) o mediante soluciones complejas de algoritmos Hull. Aquí os dejo el código fuente en descarga directa (ConvexHull.java) , echarle un vistazo ya que es muy interesante.



Algorithm 10
Esta implementación en C++ de SoftSurfer, nos provee de un cálculo sencillo mediante la entrada de unos puntos, nos devuelve la lista de puntos conectados. Este ejemplo utiliza el Andrew's monotone chain algorithm.



  • Demostraciones interactivas on-line:

http://www.cse.unsw.edu.au/~lambert/java/3d/hull.html


  • Enlaces de interés:
http://mathworld.wolfram.com/ConvexHull.html
http://www.dr-mikes-maths.com/DP-convex-hull-java-code.html

Friday, 28 November 2008

Utilizando los componentes de ZeosDBO para conectarnos con MySQL desde Delphi 2007

Ahora que ya sabemos como instalar la libreria, vamos a probarla con nuestra BD MySQL. Creamos un pequeño proyecto, y añadimos un TZConnection, un TZTable, un TDataSource y una TDBGrid. Ahora los configuraremos todos para conectar con nuestra BD.



Ahora, antes de continuar, tenemos que dirigirnos a la ruta:
C:\Archivos de programa\MySQL\MySQL Server 5.0\bin
y coger la libreria libmySQL.dll y copiarla donde esté nuestro proyecto (o crear una variable de entorno para que sea visible para nuestra aplicación).

  • Configurando la conexión:


Estos son los parámetros más importantes para que la conexión tenga esto. Una vez entrados todos, si indicamos connected := true, se conecta con nuestra BD.

  • Configurando la tabla, el datasource y la Grid.
Ahora que ya tenemos la conexión montada, es mucho más fácil, solo tenemos que coger el componente TZTable, indicarle la conexión y la tabla que queremos abrir:



Una vez seleccionada la tabla, lo conectamos con el TDataSource y este a la TDBGrid, y si luego cogemos el TZTable y lo activamos veremos como nos aparecen los datos de nuestra tabla en la Grid:



El resultado final es este:



Mucho mas cómodo que utilizando ODBC explicado en el post anterior -> Conectar Delphi con una BD MySQL.

Thursday, 20 November 2008

Configurando la libreria gráfica 2D de java

La casa GeoSoft, dispone de una completa libreria de gráficos 2D para su implementación en java.

Desde el siguiente enlace, podemos encontrar la web y sus librerias-> 2D Graphics.
Para poder utilizar la librería desde nuestro IDE, por ejemplo Eclipse, solo hay que descargarse los .jar e importarlos en nuestro proyecto. Además podemos bajarnos las fuentes para ver como utilizan la librería gráfica.
Una vez tenemos creado nuestro proyecto en eclipse, hacemos botón derecho y hacemos click en propiedades, una vez allí, nos dirigimos a la pestaña "Libraries", y añadimos el external .jar que nos hemos bajado de la web.

Una vez tenemos la librería añadida a nuestro proyecto, podemos coger alguna de las demos de las que dispone la web, añadirla y ejecutarla:


Una vez la librería está funcionando, podemos empezar a jugar con ella.