gpt4 book ai didi

c# null for System.drawing.PointT

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:41 25 4
gpt4 key购买 nike

我将 C# 用于图形。现在我想为 PointF 返回一个 null

    /// <summary>
/// Project the point according to camera position.
/// </summary>
/// <param name="p">Point position, in WC</param>
/// <returns>pixel position</returns>
public PointF Project(MCvPoint3D32f p)
{
//return new PointF(p.x, p.y);
// Extend p
Matrix<double> p_ex = new Matrix<double>(3, 1);
p_ex[0, 0] = p.x;
p_ex[1, 0] = p.y;
p_ex[2, 0] = p.z;

var rst = HomographMatrix * p_ex;
rst[0, 0] = rst[0,0] / rst[2, 0] * focalLength * scale;
rst[1, 0] = rst[1, 0] / rst[2, 0] * focalLength * scale;

return new PointF((float)rst[0, 0], (float)rst[1, 0]);
}

在这里,如果点不在我的相机的 FoV 范围内,我想为该点返回一个“null”。但实际上 PointF 不是“可空”的,那么是否有直接的方法为该点返回“空”?

不想继承原生的PointF

最佳答案

在某些方面,这取决于您的要求。例如,如果您需要存储很多点(因此空间是一个因素),您可以使用某种标记值 - 也许:

static readonly PointF NilPoint = new PointF(float.NaN, float.NaN);

然后检查该运行时,可能使用辅助方法:

public static bool IsNil(this PointF value)
{
return float.IsNaN(value.X) || float.IsNaN(value.Y);
}

所以你可以检查:

if(!point.IsNil()) {
// etc
}

然而,一个更简单的选择(有轻微的空间开销)就是使用 Nullable<T> ,即

PointF? pt1 = null; // fine
PointF? pt2 = new PointF(123,456); // also fine

关于c# null for System.drawing.PointT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16891348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com