Lo que tengo primeramente es una funcion que alguien una persona X lo desarrollo y lo cual yo quiero llevarlo al Delphi, es decir, como no puedo usar C en Delphi o bueno por lo poco que se, no se puede o no e visto ejemplos, lo que quiero es pasar la funcion a Delphi y poder usarlo ahi.
int getpower (int x, int y, int angle, int w_power, int w_angle, int x2, int y2) { const double DEGTORAD = 0.0174532925199433; const double const1 = -8.0; const double const2 = -60.0; const double const3 = 840.0; const double const4 = 5000.0; double distance, old_distance = 9999; double x_v, y_v, x_v2, y_v2, temp_x_v, temp_y_v, xx, xxx, delta_y, delta_yy, delta_yyy, delta_y2; int power, hit_power; x_v2 = (int)(cos(w_angle * DEGTORAD) * w_power) * 0.74; y_v2 = (int)(sin(w_angle * DEGTORAD) * w_power) * 0.74 - 73.5; xx = x; delta_yy = delta_y = 600 - y; // resolution is 800 x 600 power = 0; // power range is 0 - 400 temp_x_v = x_v = cos(angle * DEGTORAD); temp_y_v = y_v = sin(angle * DEGTORAD); do { temp_x_v = x_v * power; temp_y_v = y_v * power; xxx = xx; delta_yyy = delta_yy; if (delta_yyy <= 0) goto loc1; // proper if/else here.. while (1) { // avoid infinite loop if (xxx <= const2) break; if (xxx >= const3) break; if (delta_yyy >= const4) break; delta_y2 = 600 - y2; xxx += temp_x_v * 0.05; delta_yyy += temp_y_v * 0.05; temp_x_v += x_v2 * 0.05; temp_y_v += y_v2 * 0.05; distance = sqrt(pow((delta_y2 - delta_yyy),2) + pow((x2 - xxx),2)); if (old_distance > distance) { old_distance = distance; // keep current power hit_power = power; } if (delta_yyy < 0) break; } loc1: power++; } while (power <= 400); return hit_power; }
Y dicha funcion, cuando le introdusco los siguientes valores obtengo:
getpower(529, 180, 41, 18, 351, 262, 216); -> 145
Lo e compilado en c y me sale perfecto, pero ahora lo que hice fue intentar traducir el codigo y llevarlo a Delphi:
function getpower( x:integer; y:integer; angle:integer; w_power:integer; w_angle:integer; x2:integer; y2:integer):integer; const DEGTORAD : double = 0.0174532925199433; const1 : double = -8.0; const2 : double = -60.0; const3 : double = 840.0; const4 : double = 5000.0; var distance : double; old_distance : double;// = 9999; x_v, y_v, x_v2, y_v2 : double; temp_x_v, temp_y_v : double; xx, xxx, delta_y, delta_yy, delta_yyy, delta_y2 : double; powerc, hit_power : integer; label loc1; begin old_distance := 9999; //compute horizontal/wind x_v2 := cos(w_angle * DEGTORAD) * w_power * 0.74; //compute downward/gravity y_v2 := sin(w_angle * DEGTORAD) * w_power * 0.74 - 73.5; xx := x; delta_y := 600 - y; // resolution is 800 x 600 delta_yy := delta_y; powerc := 0; // power range is 0 - 400 x_v := cos(angle * DEGTORAD); temp_x_v :=x_v; y_v := sin(angle * DEGTORAD); temp_y_v := y_v; Repeat temp_x_v := x_v * powerc; temp_y_v := y_v * powerc; xxx := xx; delta_yyy := delta_yy; //temp_x_v := temp_x_v * -1; if (delta_yyy <= 0) then goto loc1; // proper if/else here.. while True do begin // avoid infinite loop if (xxx <= const2) then break; if (xxx >= const3) then break; if (delta_yyy >= const4) then break; delta_y2 := 600 - y2; // calc projectile x,y coord xxx := xxx + temp_x_v * 0.05; delta_yyy := delta_yyy + temp_y_v * 0.05; // calc projectile x,y velocity (+ wind/gravity) temp_x_v := temp_x_v + x_v2 * 0.05; temp_y_v := temp_y_v + y_v2 * 0.05; distance := sqrt(power((delta_y2 - delta_yyy),2) + power((x2 - xxx),2)); if (old_distance > distance) then begin old_distance := distance; // keep current power hit_power := powerc; end; if (delta_yyy < 0) then break; end; loc1: powerc := powerc + 1; Until (powerc <= 400); result := hit_power; end;
y para el mismo calculo anterior realizado en c, en delphi obtengo lo siguiente:
label1.Caption := intToStr(getpower(529, 180, 41, 18, 351, 262, 216)); -> 0
si alguien podria ayudarme a traducir dicha funcion en c a delphi.
Gracias
Edito: He modificado las etiquetas para que el código se vea mejor.