我遇到了将Delphi代码转换为C ++的问题。 “ Max(...)<1 then”怎么办?
以下是Delphi代码:
if (Distance(CameraPosition, CellCenterPos)/(Size*2*C*
Max([smallC*D2Matrix[X,Z], 1.0])))<1 then
begin
function Max(const Values : Array of Single): Single;
var
I : Integer;
begin
Result := 0;
for I := Low(Values) to High(Values) do
if (Values[I] > Result) then Result := Values[I]
end;
答案 0 :(得分:4)
Delphi代码未执行Max(...) < 1
。 Max()
与其他计算一起放在括号内。该代码实际上正在执行(Distance(...) / (... * Max(...)) < 1
在C ++中,Delphi代码会转换为以下形式:
float Max(const float Values[], int NumValues)
{
float Result = 0;
for(int I = 0; I < NumValues; ++I) {
if (Values[I] > Result)
Result = Values[I];
}
return Result;
}
float arr[] = {smallC * D2Matrix[X,Z], 1.0};
if ((Distance(CameraPosition, CellCenterPos) / (Size * 2 * C * Max(arr, 2))) < 1)
{
...
}
或者:
template <size_t N>
float Max(const float (&Values)[N])
{
float Result = 0;
for(int I = 0; I < N; ++I) {
if (Values[I] > Result)
Result = Values[I];
}
return Result;
}
const float arr[] = {smallC * D2Matrix[X,Z], 1.0};
if ((Distance(CameraPosition, CellCenterPos) / (Size * 2 * C * Max(arr))) < 1)
{
...
}
或者:
#include <algorithm>
float arr[] = {smallC * D2Matrix[X,Z], 1.0};
if ((Distance(CameraPosition, CellCenterPos) / (Size * 2 * C * (*std::max_element(arr, arr+2)))) < 1)
{
...
}
或:(仅C ++ 11和更高版本):
#include <algorithm>
if ((Distance(CameraPosition, CellCenterPos) / (Size * 2 * C * std::max({smallC * D2Matrix[X,Z], 1.0}))) < 1)
{
...
}