hmm, versteh ich das problem nicht, oder wie?
das einzige problem ist ja wohl, aus den 3 graphiken die koordinaten rauszukriegen
danach isses einfach
hier meine lösung:
Delphi-Quellcode:
procedure get3Dpoints(pxy, pxz, pyz: array[1..2,1..1000]; var p3d: array[1..3,1..1000]);
var
i:integer;
begin
for i:=1 to 1000 do
begin
p3d[1,i]:=pxy[1,i];
p3d[2,i]:=pxy[2,i];
p3d[3,i]:=pxz[2,i];
end;
end;
da brauch man sogar nur 2 projektionen...
das problem ist jetzt, die koordinaten zu kriegen, aber das ist ja kein mathematisches problem, sondern eher ein farb-erkennungsproblem...
man könnte das so in etwa machen:
Delphi-Quellcode:
function getpoints(bild:TPicture):array[1..2,1..1000];
var
i, j, panz:integer;
points:array[1..2,1..1000];
begin
for i:=1 to bild.width do //breite
for j:=1 to bild .heigth do //höhe
begin
if bild.Pixels[i,j]:=clBlack //wenn punkt bestandteil eines objektes
then begin
if ((bild.Pixels[i-1,j]) xor (bild.Pixels[i+1,j]))
or ((bild.Pixels[i,j-1]) xor (bild.Pixels[i,j+1]))
or ((bild.Pixels[i-1,j-1]) xor (bild.Pixels[i+1,j+1]))
or ((bild.Pixels[i+1,j-1]) xor (bild.Pixels[i-1,j+1]))
then begin //Wenn die linie nicht gerade über den punkt verläuft
panz:=panz+1; //dann isser ein eckpunkt
points[1,panz]:=i; //anzahl+1
points[2,panz]:=j; //in array eintragen
end;
end;
end;
getpoints:=points; //rückgabewert
end;
so, die if abfrage:
es wird geguckt ob die linie nicht gerade drüber verläuft
-> gerade drüber wäre statt xor immer and
-> wenns bei einer zutrifft reichts, daher or
es werden 4 richtungen geprüft:
nummer 1: -
nummer 2: |
nummer 3: \
nummer 4: /
man könnte das in ne schleife packen, aber das hab ich (noch) nicht parat...
ich hoffe das hilft erst mal