C# 求线段与圆的交点
来源:互联网 发布:网络系统集成技术 编辑:程序博客网 时间:2024/06/07 13:24
本文转自:http://blog.csdn.net/rabbit729/article/details/4285119
原文给出了很好的思路
/// <summary> /// 线段与圆的交点 /// </summary> /// <param name="ptStart">线段起点</param> /// <param name="ptEnd">线段终点</param> /// <param name="ptCenter">圆心坐标</param> /// <param name="Radius2">圆半径平方</param> /// <param name="ptInter1">交点1(若不存在返回65536)</param> /// <param name="ptInter2">交点2(若不存在返回65536)</param> protected bool LineInterCircle(Point ptStart, Point ptEnd, Point ptCenter, double Radius2, ref PointF ptInter1, ref PointF ptInter2) { ptInter1.X = ptInter2.X = 65536.0f; ptInter2.Y = ptInter2.Y = 65536.0f; float fDis = (float)Math.Sqrt((ptEnd.X - ptStart.X) * (ptEnd.X - ptStart.X) + (ptEnd.Y - ptStart.Y) * (ptEnd.Y - ptStart.Y)); PointF d = new PointF(); d.X = (ptEnd.X - ptStart.X) / fDis; d.Y = (ptEnd.Y - ptStart.Y) / fDis; PointF E = new PointF(); E.X = ptCenter.X - ptStart.X; E.Y = ptCenter.Y - ptStart.Y; float a = E.X * d.X + E.Y * d.Y; float a2 = a * a; float e2 = E.X * E.X + E.Y * E.Y; if ((Radius2 - e2 + a2) < 0) { return false; } else { float f = (float)Math.Sqrt(Radius2 - e2 + a2); float t = a - f; if (((t - 0.0) > -EPS) && (t - fDis) < EPS) { ptInter1.X = ptStart.X + t * d.X; ptInter1.Y = ptStart.Y + t * d.Y; } t = a + f; if (((t - 0.0) > -EPS) && (t - fDis) < EPS) { ptInter2.X = ptStart.X + t * d.X; ptInter2.Y = ptStart.Y + t * d.Y; } return true; } }
- C# 求线段与圆的交点
- 圆与线段的交点
- 求直线(线段)与直线(线段)的交点
- 求射线与线段相交的最多交点 poj 4048
- 求两线段的交点(C++)
- js求两个线段的交点
- POJ 2826 An Easy Problem?! (判点与线段的位置,求线段交点)
- 求线段交点
- 求两线段交点
- HDU 2528 Area (求直线与线段的交点后求面积)
- HDU 5027 Help!(三分+圆与线段的交点)
- POJ 2074(视线与障碍物+求直线和线段交点)
- poj1039 Pipe 线段与直线的交点
- 判断线段与圆弧的交点
- 求过圆心直线与圆的两个交点
- 求过圆心直线与圆的两个交点
- HDU 3803 求线段交点
- hdu 1086 求线段交点
- WDM驱动程序的基本结构和实例
- 得到SharePoint的真实登陆名的方法
- 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
- 系统调用实现机制
- 怎样花两年时间去面试一个人
- C# 求线段与圆的交点
- windows下安装Mysql最后一步start service失败
- 利用QT_DEBUG_PLUGINS检查Qt的插件问题
- log4j.properties配置详解
- Android学习及如何利用android来赚钱
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 实战:sqlserver 2008 R2容灾方案:另一种思路-1
- 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
- 如何在Android应用中加入广告