已知圆外一点,圆心和半径,求过圆外点的直线与圆的切点算法
来源:互联网 发布:淘宝触屏版官网 编辑:程序博客网 时间:2024/05/01 21:47
CPoint CalcQieDian(CPoint ptCenter, CPoint ptOutside, double dbRadious) { struct point {double x, y;}; point E,F,G,H; double r=dbRadious; //1. 坐标平移到圆心ptCenter处,求园外点的新坐标E E.x= ptOutside.x-ptCenter.x; E.y= ptOutside.y-ptCenter.y; //平移变换到E //2. 求园与OE的交点坐标F, 相当于E的缩放变换 double t= r / sqrt (E.x * E.x + E.y * E.y); //得到缩放比例 F.x= E.x * t; F.y= E.y * t; //缩放变换到F //3. 将E旋转变换角度a到切点G,其中cos(a)=r/OF=t, 所以a=arccos(t); double a=acos(t); //得到旋转角度 G.x=F.x*cos(a) -F.y*sin(a); G.y=F.x*sin(a) +F.y*cos(a); //旋转变换到G //4. 将G平移到原来的坐标下得到新坐标H H.x=G.x+ptCenter.x; H.y=G.y+ptCenter.y; //平移变换到H //5. 返回H return CPoint(int(H.x),int(H.y)); //6. 实际应用过程中,只要一个中间变量E,其他F,G,H可以不用。}
应该说方法有很多种,几何的,代数的,做的过程中也在纸上运算了好长时间,可能也是这些知识很久没用了,生疏很多。解出来的公式都比较复杂,无意间在网上找到这个方法,没经过具体的笔算验证,但是求出来的结果是我预判范围的,暂定为计算结果是正确的。在这边共享下,有需要的童鞋不妨自己验证一下。
对了,这个函数只能返回一个点,理论上有两个切点的,只要把15行改成如下:
double a=-acos(t); //得到旋转角度
- 已知圆外一点,圆心和半径,求过圆外点的直线与圆的切点算法
- 求过圆心直线与圆的两个交点
- 求过圆心直线与圆的两个交点
- 已知半径和两圆相交面积求圆心距
- hdu1077已知半径以及圆上2点求圆心 圆圈点的个数
- 求过圆心直线与圆的两个交点(JAVA & OC)
- 已知圆上三点坐标求圆心和半径
- 第11周项目4-3求过圆外一点与圆心的连线与圆的两个交点
- 求内切圆的圆心和半径(已知三个点的坐标)
- 求内切圆的圆心和半径(已知三个点的坐标)
- 第十三周--圆外一点与圆心相连的直线与圆的交点
- MATLAB中已知圆心和半径画圆
- 已知直线过两点,和线外一点,求直线和垂足及垂距
- WPF arcgis中已知圆心坐标和半径,求圆上一点的坐标(当前点的x坐标和圆心相等)
- 已知三点求圆心与半径
- 已知三点坐标,求外接圆圆心坐标与半径。
- 13.3输出给定一点p与圆心相连成的直线与圆的两个交点
- 已知两点坐标和半径求圆心坐标程序C++
- opencv两视频叠加(控制台版)
- CSRF的攻击与防御
- Step By Step(Lua面向对象)
- Linux 终端访问 FTP 及 上传下载 文件 .
- warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=l
- 已知圆外一点,圆心和半径,求过圆外点的直线与圆的切点算法
- 用IE浏览器可以上网,用其他浏览器都不能上网
- Android 读取APK签名信息
- Page versions in OneNote
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- Windows 服务增强
- UISwitch
- HexToAsc 图片
- 程序启动时候自定义的显示页面