求两曲线间的最大距离,最小距离和平均距离 ( 积分: 200 )

  • 主题发起人 主题发起人 十三少(xiaohui)
  • 开始时间 开始时间

十三少(xiaohui)

Unregistered / Unconfirmed
GUEST, unregistred user!
在画布中给出两条曲线,我们要求两曲线间的最大距离,最小距离和平均距离,并用用图形也统计出距离的分布
 
這個確實有點難度啊。
 
首先找出这两条曲线有什么规律。。两曲线的长度,建议极根。
 
曲线拟合有函数的吧 具体要看处理什么问题 图片还是什么
 
因为要在一张病人的B超图片上画曲线(两条)并算它们之间的最大距离,和最小距离,还有平均距离
 
我这样实现了,提提意见
procedure DoPaintNHLine(nCanvas:TCanvas;P:Array of TPoint;nCount:Integer);
Type
TXs=Record
A,B,C:Real;
end;
pXs=^AXs;
AXs=Array[0..1000] of TXs;
var
TmpP:Array [0..2] of TPoint;
A,B,C:real;
i,J,TmpY:integer;
JQXs:real;
Xs:pXs;
procedure GetXs(var a,b,c:real;P:Array of TPoint);
var iFz,iFm:real;
function Pf(n:integer):integer;
begin
Result:=n*n;
end;
begin
iFz:=(P[0].Y-P[2].Y)*(P[0].X-P[1].X)-(P[0].Y-P[1].Y)*(P[0].X-P[2].X);
iFm:=(Pf(P[0].X)-Pf(P[2].X))*(P[0].X-P[1].X)-(Pf(P[0].X)-Pf(P[1].X))*(P[0].X-P[2].X);
a:=iFz/iFm;
b:=((P[0].Y-P[1].Y)-(Pf(P[0].X)-Pf(P[1].X))*a)/(P[0].X-P[1].X);
c:=P[0].Y-a*Pf(P[0].X)-b*P[0].X;
end;
function GetYValue(A,B,C:real;X:integer):integer;
begin
Result:=Round(A*X*X+B*X+C);
end;
begin
For i:=0 to nCount-1 do
nCanvas.Ellipse(p.X-2,P.Y-2,P.X+2,p.Y+2);
GetMem(Xs,(nCount-2)*SizeOf(TXs));
For i:=0 to nCount-1-2 do
begin
MoveMemory(@TmpP[0],@P,3*SizeOf(TPoint));
GetXs(A,B,C,TmpP);
Xs^.A:=A;Xs^.B:=B;Xs^.C:=C;
end;

nCanvas.MoveTo(P[0].X,P[0].Y);
For i:=0 to nCount-1-1 do
begin
JQXs:=0;
For J:=P.X to P[i+1].X do
begin
if (i=0) or (i=nCount-2) then
begin
if i=0 then
TmpY:=GetYValue(Xs.A,Xs.B,Xs.C,J)
else
TmpY:=GetYValue(Xs[i-1].A,Xs[i-1].B,Xs[i-1].C,J)
end
else
begin
TmpY:=Round(GetYValue(Xs[i-1].A,Xs[i-1].B,Xs[i-1].C,J)*(1-JQxs)+GetYValue(Xs.A,Xs.B,Xs.C,J)*JQXs);
JqXs:=JqXs+1/(P[i+1].X-P.X);
end;
nCanvas.LineTo(J,TmpY);

end;
end;
FreeMem(Xs);
end;
 
后退
顶部