当前位置: 首页 > news >正文

求圆心到点的直线与圆的相交点

求圆心到点的直线与圆的相交点

 点B为圆上一动点,已知圆心O(x2,y2), 圆外点A(x1,y1),圆半径r值,求B(x,y)坐标。

由图可知,产生下面两个公式。

m/n = y1-y2/x1-x2

      m^2+n^2=r^2

由上面的公式可以得出

     n的长度计算公式为n^2= r^2 / [ (y1-y2 / x1-x2)^2 + 1]

 

 点B的坐标为(x2-n,  y2+m)

PolygonUtils.java代码如下:

public class PolygonUtils {

/**
   * 求交点坐标
   * @param p1 圆外任意一点坐标
   * @param o1 圆心坐标
   * @param radius 圆半径
   * @return
   */

    public PointDto getLine4CircularV1(PointDto p1, PointDto o1, double radius){
        //m,n分别为为交点跟圆心在y轴,和x轴的间距;
        double m=0,n=0;
        double y = p1.y-o1.y, x = p1.x-o1.x;
        //计算m和n
        //n^2= r^2 / [ (y1-y2 / x1-x2)^2 + 1]
        n = pow(radius, 2) / (pow(y / x, 2) + 1) ;
        //m^2 + n^2 = r^2
        m = sqrt( pow(radius, 2) - n);
        n = sqrt(n);
        PointDto dto = new PointDto();
        if(x > 0){
            if(y > 0){
               //在第四象限
            }else{
                //在第一象限
                m *= -1;
            }
        }else{
            n *= -1;
            if(y > 0){
                //在第三象限
            }else{
                //在第二象限
                m *=-1;
            }
        }
        dto.setY(o1.y+ m);
        dto.setX(o1.x+ n);
        return dto;
    }
}

PointDto.java

public class PointDto {
    public double x;
    public double y;

    public PointDto() {
        super();
    }
    public PointDto(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }
}

相关文章:

  • LeetCode_前缀树_648.单词替换
  • 在线就能设计电商主图的智能平台工具
  • adb 指令
  • JavaWeb之Maven学习
  • ip-guard安全网关问题集锦一
  • 新知实验室_初探腾讯云音视频
  • DOM中的diff算法详解
  • 前端网站动态主题色解决方案
  • 用DevExpress实现基于HTMLCSS的桌面应用程序的UI(一)
  • Android OpenGL ES 3.0 PBO像素缓冲区对象
  • 腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf
  • Eureka服务注册发现原理
  • RK3399平台开发系列讲解(中断篇)中断控制器驱动初始化
  • 【Redis】Redis的持久化
  • LibreOJ_10010
  • 数据增强
  • 一文搞懂堆外内存(模拟内存泄漏)
  • 还在调API写所谓的AI“女友”,唠了唠了,教你基于python咱们“new”一个(深度学习)
  • Win7纯净版系统镜像64位介绍
  • Kali系统MSF模块暴力破解MySQL弱口令漏洞
  • 目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)
  • Spark中宽依赖、窄依赖、Job执行流程
  • R语言最优聚类数目k改进kmean聚类算法
  • Springboot流浪动物管理系统p2326计算机毕业设计-课程设计-期末作业-毕设程序代做
  • Request和Response基础知识入门
  • 实战Docker未授权访问提权
  • 锅炉仪器有限公司厂家_那厂家生产取暖电锅炉
  • 间接式常压热水锅炉_58mw燃气热水锅炉安装预算
  • 天然气锅炉烧水的原理_天然气锅炉总是停