Hej...
Jeg skal bruge en metode der tager n* stk. koordinater(verticer) i et
3-dim. koordnatsystem og giver 1000 koordinater igen, som
repræsenterer den samme linie, blot som "blød" linie.
Jeg bruger pt. Beziér interpolation, og det virker da også, men er
ikke rigtig tilfreds, da den resulterende kurve ikke går gennem
kontrolpunkterne, men blot "nær" dem.
Jeg tror jeg har implementeret algoritmen rigtigt, men er ikke sikker.
Anyone? (Koden står i bunden af indlægget).
Hvilken algoritme kan jeg bruge i stedet? Den skal selvfølgelig være
så simpel som muligt at implementere, men gerne virke lidt bedre end
Beziér. Jeg har ledt på nettet, men kan ikke rigtig overskue hvad jeg
kan bruge og jeg kan kun finde meget lidt konkret info om de
forskellige algoritmer. evnt. links er mere end velkomne.
Min funktion ser pt. sådan ud - lader man så t variere mellem 0 og 1
1000 gange kommer de ønskede punkter ud.
På forhånd mange tak for hjælpen!
function nPointBez(arr : Array of Vertex; t : Double):vertex;
var
k,n : Integer;
s : Double;
resultvertex : Vertex;
begin
ResultVertex := Vertex.create(0,0,0,0,0,0,0,0);
n := length(arr)-1;
for k := 0 to n do
begin
s := (fakultet(n))/(fakultet(k)*fakultet(n-k));
ResultVertex :=
VertexAdd(VertexScale((Power(1-t,n-k)),VertexScale((Power(t,k)),VertexScale(s,arr[k]))),ResultVertex);
end;
result := resultVertex;
end;
hvor de brugte metoder er defineret således:
function VertexScale(r:Double;a:Vertex):Vertex;
function VertexAdd(a,b:vertex): Vertex;
*hvor 5<n<100
--
Rune Simonsen
|