We could go like this.
function tform1.adv(a,b:real):real; begin adv:=a+b; end;
The problem is the return is real, which is single value only. We want a and b as vector. Wait...
How we define vector in Delphi? I don't know. I used to treat a vector in Delphi as array. So I coded it like this
var a,b:array[0..1]of real;
So far I had no problem. Lately, I am going crazy with overuse functions in Delphi, and trying operating vectors using function too.
But if I write the code like this
function tform1.adv(a,b:array[0..1]of real):real; begin adv:=a[0]+b[0]; {a[1]+b[1]?} end;
It will only return one value. So I improvised by modify it
like this
function tform1.adv(a,b:array[0..1]of real):array[0..1]ofreal; begin adv[0]:=a[0]+b[0]; adv[1]:=a[1]+b[1]; end;
But it won't compile. (it will give error message "identifier expected but ARRAY found"). So I try another approach
type vector=array[0..1] of real; function tform1.adv(a,b:vector):vector; begin adv[0]:=a[0]+b[0]; adv[1]:=a[1]+b[1]; end;
It works, :).
Here my last night tinkering with "vector" in Delphi, :)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math; type vector=array[0..1] of real; type TForm1 = class(TForm) procedure proses; function mux(a:real;b:vector):vector; function dot(a,b:vector):real; function norm(a,b:vector):vector; function adv(a,b:vector):vector; function suv(a,b:vector):vector; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; const n=3; var Form1: TForm1; r,v:array[1..n] of vector; implementation {$R *.dfm} function tform1.adv(a,b:vector):vector; begin adv[0]:=a[0]+b[0]; adv[1]:=a[1]+b[1]; end; function tform1.suv(a,b:vector):vector; begin suv[0]:=a[0]-b[0]; suv[1]:=a[1]-b[1]; end; function tform1.mux(a:real;b:vector):vector; begin mux[0]:=a*b[0]; mux[1]:=a*b[1]; end; function tform1.dot(a,b:vector):real; begin dot:=a[0]*b[0]+a[1]*b[1]; end; function tform1.norm(a,b:vector):vector; var mag,i,j:real; begin i:=b[0]-a[0]; j:=b[1]-a[1]; mag:=sqrt(power(i,2)+power(j,2)); if mag<>0 then begin norm[0]:=i/mag; norm[1]:=j/mag; end; end; procedure tform1.proses; var direction:vector; vi,vj,swap:real; i,j:integer; begin j:=2;i:=1; direction:=norm(r[j],r[i]);//call function vi:=dot(v[i],direction); vj:=dot(v[j],direction); swap:=vj-vi; v[i]:=adv(v[i],mux(swap,direction)); v[j]:=suv(v[j],mux(swap,direction)); end; procedure TForm1.FormCreate(Sender: TObject); begin proses; end; end.
Add a comment