comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Noche estrellada

  • 0 Respuestas
  • 1737 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5388
  • Actividad:
    36.67%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Febrero 24, 2010, 04:57:44 pm »
Este codigo pinta, en principio, lo que es llamado en Física el campo de potencial de ciertas cargas electricas. Cambiando el valor de las constantes se consigue un efecto vistoso que recuerda a una noche con estrellas

Código: Delphi
  1. unit potencial;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls;
  8.  
  9. type
  10.      Carga = record
  11.      x,y : integer;
  12.      q : double;
  13. end;
  14.  
  15. type
  16.   TForm1 = class(TForm)
  17.     Button1: TButton;
  18.     procedure Button1Click(Sender: TObject);
  19.     procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  20.       Y: Integer);
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.   end;
  27.  
  28. var
  29.      Form1: TForm1;
  30.      Carregues : array [0..50] of Carga;
  31. //     Carregues : array [0..10] of Carga;
  32. //     Carregues : array [0..1] of Carga;
  33.  
  34. implementation
  35.  
  36. {$R *.DFM}
  37.  
  38. function R(x1,y1,x2,y2 : integer): double;
  39. begin
  40.      result := sqrt ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
  41. end;
  42.  
  43. function V(x,y : integer; q : Carga) : double; overload;
  44. const
  45.      K : double = $01;
  46. //   K : double = $0100;
  47. begin
  48.      try
  49.      result := q.q*K / R(q.x,q.y,x,y);
  50.      except
  51.      result := 0;
  52.      end;
  53. end;
  54.  
  55. function V(x,y : integer; q : array of Carga) : double; overload;
  56. var
  57.      i : integer;
  58. begin
  59.      result := 0;
  60.      for i := Low(q) to High(q) do
  61.      result := result + V(x,y,q[i]);
  62. end;
  63.  
  64. procedure TForm1.Button1Click(Sender: TObject);
  65. var
  66.      i,j : integer;
  67.      col : TColor;
  68. const
  69.      Colors    : array [boolean] of TColor = (clYellow, $80FF00);
  70. begin
  71.      for i := Low(Carregues) to High(Carregues) do
  72.      begin
  73.           Carregues[i].x := random(width);
  74.           Carregues[i].y := random(Height);
  75.           repeat
  76.           Carregues[i].q := (random(2)-1)*random(5)/(random(2) + 0.01);
  77. //          Carregues[i].q := (random(2)-1)*random(2)/(random(2) + 0.01);
  78.           until Carregues[i].q <> 0;
  79.      end;
  80.  
  81.      canvas.Brush.Color := clBlack;
  82.      canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
  83.      canvas.Brush.Color := clRed;
  84.  
  85. //     col := random($010101);
  86. //     col := 3872;
  87. //     col := 53762;
  88. //   col := 616;
  89. //     col := $010000;
  90.      col := $010101;
  91. //     col := $01;
  92. //     col := $010000;
  93.  
  94.  
  95.      for i := 0 to ClientWidth do
  96.      for j := 0 to ClientHeight do
  97.           canvas.Pixels[i,j] := Col*Abs(Round(V(i,j,Carregues)));
  98.  
  99.      for i := low(Carregues) to High(Carregues) do
  100.           canvas.Pixels[Carregues[i].x,Carregues[i].y] := Colors[Carregues[i].q > 0];
  101.  
  102.      tag := col;
  103. end;
  104.  
  105. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  106.   Y: Integer);
  107. begin
  108.      Caption := inttostr(Tag) + ' ' + FormatFloat('0.00000',V(X,Y,Carregues));
  109. end;
  110.  
  111. procedure TForm1.FormCreate(Sender: TObject);
  112. begin
  113.      randomize;
  114. end;
  115.  
  116. end.
  117.  



« Última modificación: Abril 15, 2013, 11:25:17 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!