我必须找到INTERVALL-1 = [x1.....y1]
的共享间隔
和INTERVALL-2 := [x2 .....y2]
所有都是简单的实际值定义的间隔。 Delphi语法中是否有任何内置函数或一些免费的东西,我可以自己获得共享范围而无需特殊编码?
我想避免的事情:
procedure Findintervall ( ...........)
begin
if x1 < x2 then
if ....
if ....
if
end;
猜猜这可能是代码,但5个月后难以阅读。
答案 0 :(得分:5)
没有任何内置功能,但编写该功能并不是很困难。您可以使用显式if
语句编写它。或者,您可以使用Min
单元中的Max
和Math
。像这样:
type
TInterval = record
public
Left: Double;
Right: Double;
public
class function New(const Left, Right: Double): TInterval; static;
class function Intersection(const A, B: TInterval): TInterval; static;
end;
const
NullInterval: TInterval = (Left: NaN; Right: NaN);
class function TInterval.New(const Left, Right: Double): TInterval;
begin
Result.Left := Left;
Result.Right := Right;
end;
class function TInterval.Intersection(const A, B: TInterval): TInterval;
begin
Assert(A.Left<=A.Right);
Assert(B.Left<=B.Right);
Result.Left := Max(A.Left, B.Left);
Result.Right := Min(A.Right, B.Right);
if Result.Left > Result.Right then
Result := NullInterval;
end;