本文整理汇总了C#中System.Drawing.PointF.DistancePow2方法的典型用法代码示例。如果您正苦于以下问题:C# PointF.DistancePow2方法的具体用法?C# PointF.DistancePow2怎么用?C# PointF.DistancePow2使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Drawing.PointF
的用法示例。
在下文中一共展示了PointF.DistancePow2方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetNormalPointForCircle
/// <summary>
/// Получить точку нормали (проходящую через заданную точку С) и лежащую на окружности. Точка может лежать внутри/снаружи и на границе.
/// </summary>
/// <returns></returns>
public static PointF GetNormalPointForCircle(PointF c, float r, PointF pnt)
{
var a1 = pnt.Y * pnt.Y * c.X - 2 * c.X * c.X * pnt.X + c.X * c.X * c.X + c.Y * c.Y * c.X
- 2 * c.Y * c.X * pnt.Y + c.X * pnt.X * pnt.X;
var s1 = (float)Math.Sqrt(4 * c.Y * pnt.Y * r * r * pnt.X * c.X - 2 * c.Y * c.Y * r * r * pnt.X * c.X
- 2 * c.Y * pnt.Y * r * r * pnt.X * pnt.X - 2 * c.Y * pnt.Y * r * r * c.X * c.X
- 2 * pnt.Y * pnt.Y * r * r * pnt.X * c.X + c.Y * c.Y * r * r * pnt.X * pnt.X
+ c.Y * c.Y * r * r * c.X * c.X + pnt.Y * pnt.Y * r * r * pnt.X * pnt.X
+ pnt.Y * pnt.Y * r * r * c.X * c.X - 4 * pnt.X * pnt.X * pnt.X * c.X * r * r
- 4 * pnt.X * c.X * c.X * c.X * r * r + 6 * pnt.X * pnt.X * c.X * c.X * r * r
+ c.X * c.X * c.X * c.X * r * r + pnt.X * pnt.X * pnt.X * pnt.X * r * r);
var denom = c.Y * c.Y - 2 * c.Y * pnt.Y + pnt.Y * pnt.Y - 2 * pnt.X * c.X + c.X * c.X + pnt.X * pnt.X;
var p = new[] { new PointF((a1 + s1) / denom, 0), new PointF(-(-a1 + s1) / denom, 0) };
p[0].Y = (p[0].X * c.Y - p[0].X * pnt.Y + c.X * pnt.Y - pnt.X * c.Y) / (-pnt.X + c.X);
p[1].Y = (p[1].X * c.Y - p[1].X * pnt.Y + c.X * pnt.Y - pnt.X * c.Y) / (-pnt.X + c.X);
return pnt.DistancePow2(p[0]) < pnt.DistancePow2(p[1])
? p[0]
: p[1];
//var cosinus = Cosinus(NormalizeVector(x1, y1, x1 + r, y1), NormalizeVector(x1, y1, xc, yc));
//var sinus = Sinus(NormalizeVector(x1, y1, x1 + r, y1), NormalizeVector(x1, y1, xc, yc));
//return new PointF(r * cosinus + x1, r * sinus + y1);
}
示例2: DistanceTo2
public override float DistanceTo2(PointF pnt)
{
var cnt = GetCenter();
return pnt.DistancePow2(cnt) - 2 * pnt.Distance(cnt) * Radius + Radius * Radius;
}
示例3: IsOwnPoint
/// <summary>
/// Принадлежность точки вектору
/// </summary>
/// <param name="pnt"></param>
/// <returns></returns>
public bool IsOwnPoint(PointF pnt)
{
return Math.Abs((LengthPow2() - pnt.DistancePow2(Begin) - pnt.DistancePow2(End)) - 0) < EPSILON;
}
示例4: DistancePow2ToPoint
/// <summary>
/// Квадратное растояние до точки (для ускореных вычислений)
/// </summary>
/// <param name="pnt">Заданная точка</param>
/// <returns></returns>
public float DistancePow2ToPoint(PointF pnt)
{
return pnt.DistancePow2(GetNormal(pnt));
}
示例5: DistancePoint
/// <summary>
/// Расстояние от точки до полигона
/// </summary>
/// <param name="pnt">Точка</param>
/// <returns></returns>
public float DistancePoint(PointF pnt)
{
if (pnts.Count < 3) throw new Exception("Точек в полигоне должно быть минимум 3");
var v1 = new Vector();
float minDistPow2 = float.MaxValue, distPow2;
PointF curr;
for (var i = 0; i < pnts.Count; i++)
{
v1.Begin = pnts[i];
v1.End = pnts[(i + 1) % pnts.Count];
curr = v1.GetNormal(pnt);
distPow2 = pnt.DistancePow2(curr);
if (distPow2 < minDistPow2)
minDistPow2 = distPow2;
}
minDistPow2 = (float)Math.Sqrt(minDistPow2);
return JointPoint(pnt) ? -minDistPow2 : minDistPow2;
}
示例6: GetNormalPoint
/// <summary>
/// Точка нормали лежащая на границе полигона
/// </summary>
/// <param name="pnt">Внешняя точка</param>
/// <returns></returns>
public PointF GetNormalPoint(PointF pnt)
{
if (pnts.Count < 3) throw new Exception("Точек в полигоне должно быть минимум 3");
var v1 = new Vector();
float minDistPow2 = float.MaxValue, distPow2;
PointF curr, res = new PointF();
for (var i = 0; i < pnts.Count; i++)
{
v1.Begin = pnts[i];
v1.End = pnts[(i + 1) % pnts.Count];
curr = v1.GetNormal(pnt);
distPow2 = pnt.DistancePow2(curr);
if (distPow2 < minDistPow2)
{
res = curr;
minDistPow2 = distPow2;
}
}
return res;
}