// CROSS(A,B,ifor)表示当A从下方向上穿过B时返回1,否则返回0
function CROSS(A_,B_:Variant;ifor_:Integer):Boolean;
var
A,B,REFA,REFB:Single;
ArrB:ArraySingle;
i:integer;
begin
Result:=False;
if VarIsArray(A_) then begin
i:=1+VarArrayHighBound(A_,1) ;
if (i<ifor_-1) or (ifor_=0) then EXIT;
A:=A_[ifor_];
REFA:=A_[ifor_-1];
end else begin
A:=A_; REFA:=A;
end;
if VarIsArray(B_) then begin
i:=1+VarArrayHighBound(B_,1) ;
if (i<ifor_-1) or (ifor_=0) then EXIT;
B:=B_[ifor_];
REFB:=B_[ifor_-1];
end else begin
B:=B_; REFB:=B;
end;
ShowMessage(Format('ARR_A:%F ARR_B:%F EA:%F EB:%F',[a,refa,b,REFB]));
if (( A>B ) and ( REFA<=REFB ) )
or
(( A>=B ) and ( REFA<REFB ) )
then Result:=True;
end;
调用方式
procedure TForm1.btn1Click(Sender: TObject);
var
A,B:ArraySingle;
begin
SetLength(B,10);
B[0]:=10;
B[1]:=-1;
B[2]:=11;
B[3]:=11;
B[4]:=11;
IF CROSS(B,0,2) then ShowMessage('Y') ELSE ShowMessage('N');
end;