p点到(a,b)点两所在直线的垂点坐标及p点是否在(a,b)两点所在直线上
2015-07-17 14:06
405 查看
/// <summary>
/// p点到(a,b)点两所在直线的垂点坐标
/// </summary>
/// <param name="a">直线上a点</param>
/// <param name="b">直线上b点</param>
/// <param name="p">点</param>
/// <returns>垂点坐标</returns>
public static Vector2D GetVerticalPosition(Vector2D a, Vector2D b, Vector2D p)
{
double fa = b.Y - a.Y;
double fb = a.X - b.X;
double fc = a.Y * b.X - a.X * b.Y;
Vector2D vpt = new Vector2D();//垂足
vpt.X = (fb * fb * p.X - fa * fb * p.Y - fa * fc) / (fa * fa + fb * fb);
vpt.Y = (fa * fa * p.Y - fa * fb * p.X - fb * fc) / (fa * fa + fb * fb);
return vpt;
}
/// <summary>
/// p点是否在(a,b)两点所在直线上
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="foot"></param>
/// <returns></returns>
public static bool DotIsOnLine(Vector2D a, Vector2D b, Vector2D foot)
{
return Math.Min(a.X, b.X) <= foot.X && foot.X <= Math.Max(a.X, b.X) && Math.Min(a.Y, b.Y) <= foot.Y && foot.Y <= Math.Max(a.Y, b.Y);
}
/// p点到(a,b)点两所在直线的垂点坐标
/// </summary>
/// <param name="a">直线上a点</param>
/// <param name="b">直线上b点</param>
/// <param name="p">点</param>
/// <returns>垂点坐标</returns>
public static Vector2D GetVerticalPosition(Vector2D a, Vector2D b, Vector2D p)
{
double fa = b.Y - a.Y;
double fb = a.X - b.X;
double fc = a.Y * b.X - a.X * b.Y;
Vector2D vpt = new Vector2D();//垂足
vpt.X = (fb * fb * p.X - fa * fb * p.Y - fa * fc) / (fa * fa + fb * fb);
vpt.Y = (fa * fa * p.Y - fa * fb * p.X - fb * fc) / (fa * fa + fb * fb);
return vpt;
}
/// <summary>
/// p点是否在(a,b)两点所在直线上
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="foot"></param>
/// <returns></returns>
public static bool DotIsOnLine(Vector2D a, Vector2D b, Vector2D foot)
{
return Math.Min(a.X, b.X) <= foot.X && foot.X <= Math.Max(a.X, b.X) && Math.Min(a.Y, b.Y) <= foot.Y && foot.Y <= Math.Max(a.Y, b.Y);
}
相关文章推荐
- Putty设置删除
- 如何用PreparedStatement来执行sql语句【通过事务】
- 流行的Tab菜单
- Win10新版许可条款:盗版Win7/Win8.1难洗白
- C#使用Log4Net记录日志
- 使用安卓MediaRecorder录制音频时,多个音频文件的合并操作
- Android 手把手教您自定义ViewGroup(一)
- jQuery/Ajax/PHP/Json 的一个综合例子
- perl脚本修改文档
- hdu 1701 ACMer
- hdu 1711 Number Sequence(kmp)
- awk中的NR FNR
- HDU 5090 Game with Pearls (贪心)
- Access操作类
- hdu 1711 Number Sequence(kmp)
- hdu 1701 ACMer
- win10家庭版升级专业版多少钱?win10家庭版升级专业版价格曝光
- Sublime Text 3 快捷键汇总
- 3个技巧让你正能量满满
- android:installLocation