Java 检查一条线是否与圆接触或相交(Check if a line touches or intersects a circle)

article/2025/6/7 13:28:57

        给定一个圆的圆心坐标、半径 > 1 的圆心坐标以及一条直线的方程。任务是检查给定的直线是否与圆相交。有三种可能性: 

    1、线与圆相交。

    2、线与圆相切。

    3、线在圆外。

注意:直线的一般方程是 a*x + b*y + c = 0,因此输入中只给出常数 a、b、c。

例子: 

输入:半径 = 5,中心 = (0, 0),
        a = 1,b = -1,c = 0。
        
输出:相交

输入:半径 = 5,中心 = (0, 0),
         a = 5,b = 0,c = 0。
         
输出:相交

输入:半径 = 5,中心 = (0, 0),
         a = 1,b = 1,c = -16。
         
输出:外部

这个想法是将圆心和直线之间的垂直距离与圆的半径进行比较。

算法: 

1. 找到圆心和给定直线之间的垂直线(假设为 p)。

2. 将此距离 p 与半径 r 进行比较。...... 

    a) 如果 p > r,则线位于圆外。...... 

    b) 如果 p = r,则线与圆相切。...... 

    c) 如果 p < r,则线与圆相交。

如何找到垂直距离?可以使用以下公式计算直线与点的距离: 

示例代码:

// Java program to check if a line touches or 
// intersects or outside a circle.

import java.io.*;

class GFG {
    
    static void checkCollision(int a, int b, int c, 
                               int x, int y, int radius)
    {
        // Finding the distance of line from center.
        double dist = (Math.abs(a * x + b * y + c)) / 
                        Math.sqrt(a * a + b * b);
    
        // Checking if the distance is less than, 
        // greater than or equal to radius.
        if (radius == dist)
            System.out.println ( "Touch" );
        else if (radius > dist)
            System.out.println( "Intersect") ;
        else
            System.out.println( "Outside") ;
    }
    
    // Driven Program
    public static void main (String[] args) 
    {
        int radius = 5;
        int x = 0, y = 0;
        int a = 3, b = 4, c = 25;
        checkCollision(a, b, c, x, y, radius);
    
    }
}

输出:

Touch

时间复杂度: O(log(a*a + b*b)),因为它使用内置 sqrt 函数

辅助空间: O(1)

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。


http://www.hkcw.cn/article/yQnFvpNWkM.shtml

相关文章

typescript的Interface和Type

类型别名和接口非常相似&#xff0c;在大多数情况下你可以在它们之间自由选择。 几乎所有的 interface 功能都可以在 type 中使用&#xff0c;关键区别在于不能重新开放类型以添加新的属性&#xff0c;而接口始终是可扩展的。 // window.ts.transpileModule(src, {}); 这是调…

(17)课36:窗口函数的例题:例三登录时间与连续三天登录,例四球员的进球时刻连续进球。

&#xff08;89&#xff09;例三登录时间 &#xff1a; 保留代码版本 &#xff1a; CREATE TABLE sql_8( user_id varchar(2), login_date date ); insert into sql_8(user_id,login_date) values(A,2024-09-02),(A,2024-09-03),(A,2024-09-04),(B,2023-11-25),(B,2023-12- 3…

go语言基础|slice入门

slice slice介绍 slice中文叫切片&#xff0c;是go官方提供的一个可变数组&#xff0c;是一个轻量级的数据结构&#xff0c;功能上和c的vector&#xff0c;Java的ArrayList差不多。 slice和数组是有一些区别的&#xff0c;是为了弥补数组的一些不足而诞生的数据结构。最大的…

CodeTop100 Day21

今天这三题是二叉树中简单的题了&#xff0c;但也算是常考题 61、对称二叉树101 class Solution {public boolean isSymmetric(TreeNode root) {return ismirror(root,root);}public boolean ismirror(TreeNode t1,TreeNode t2){if(t1null&&t2null){return true;}if(t…

机器学习——主成分分析(PCA)

一、PCA思想 1.1 PCA定义 PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是一种统计学方法&#xff0c;用于对数据进行降维处理。它通过线性变换将原始数据转换到一个新的坐标系统中&#xff0c;使得在这个新坐标系下&#xff0c;数据的方差…

ONLYOFFICE 与 LocalAI:在 Ubuntu 上搭建 AI 文档编辑环境

如果你希望在本地 Ubuntu 设备上使用 AI 模型编辑文档、电子表格和演示文稿&#xff0c;ONLYOFFICE 桌面编辑器 与 GPT4ALL 的搭配并不是唯一的选择。 还有另一个本地 AI 平台可供选择。它安装方便&#xff0c;并可以通过 AI 模型处理本地办公文件。这个平台叫做 LocalAI&…

【OCCT+ImGUI系列】011-Poly-Poly_Triangle三角形面片

Poly_Triangle 是什么&#xff1f; Poly_Triangle 是一个非常轻量的类&#xff0c;用于表示一个三角网格中的单个三角形面片。它是构成 Poly_Triangulation&#xff08;三角网格对象&#xff09;的基本单位之一。之后会写关于碰撞检测的相关文章&#xff0c;三角面片是非常重要…

分布式拜占庭容错算法——权益证明(PoS)算法详解

Java 实现权益证明&#xff08;PoS&#xff09;算法详解 一、PoS 核心机制 #mermaid-svg-8VcpJQY92Jtxe9m1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8VcpJQY92Jtxe9m1 .error-icon{fill:#552222;}#mermaid-s…

Pycharm的使用技巧总结

目录 一、高效便捷的快捷键 二、界面汉化处理 1.设置 2.插件 3.汉化插件安装 三、修改字体大小、颜色 1.选择文件-设置 2.选择编辑器-配色方案-python 3.修改注释行颜色 4.修改编辑器字体颜色 一、高效便捷的快捷键 序号快捷键功能场景效果1Ctrl /快速注释/取消注释…

从 Docker 到 Containerd:Kubernetes 容器运行时迁移实战指南

一、背景 Kubernetes 自 v1.24 起移除了 dockershim&#xff0c;不再原生支持 Docker Engine&#xff0c;用户需迁移至受支持的 CRI 兼容运行时&#xff0c;如&#xff1a; Containerd&#xff08;推荐&#xff0c;高性能、轻量级&#xff09; CRI-O&#xff08;专为 Kuberne…

基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案

在工业系统开发中&#xff0c;**“稳定”**往往比“先进”更重要。设备一旦部署&#xff0c;生命周期动辄 5~10 年&#xff0c;系统重启或异常恢复成本高昂。 这时候&#xff0c;一套“值得托付”的软硬件组合&#xff0c;就显得尤为关键。 ✅ NXP —— 提供稳定、长期供货的工…

03.搭建K8S集群

K8S集群搭建的方式 目前主流的搭建k8s集群的方式有kubeadm、minikube、二进制包三种方式&#xff1a; kubeadm&#xff08;本案例搭建方式&#xff09; 是一个工具&#xff0c;用于快速搭建kubernetes集群&#xff0c;目前应该是比较方便和推荐的&#xff0c;简单易用 kubea…

Redis底层数据结构之快链表(QuickList)

QuickList基本结构 用一句话来说&#xff0c;QuickList是一个双端链表&#xff0c;每一个链表节点中存储的是ZipList&#xff0c;参照下面这张图可以更好地理解QuickList的结构组成&#xff1a; QuickList在Redis6.0中一共定义了6个结构体&#xff0c;分别为&#xff1a; quick…

Mac查看MySQL版本的命令

通过 Homebrew 查看&#xff08;如果是用 Homebrew 安装的&#xff09; brew info mysql 会显示你安装的版本、路径等信息。 你的终端输出显示&#xff1a;你并没有安装 MySQL&#xff0c;只是查询了 brew 中的 MySQL 安装信息。我们一起来看下重点&#xff1a; &#x1f9fe…

Spring Boot 自动配置原理:从入门到精通

Spring Boot 的自动配置是其核心特性之一&#xff0c;它极大地简化了 Spring 应用的开发&#xff0c;让开发者可以专注于业务逻辑&#xff0c;而无需编写大量的配置代码。 本文将深入探讨 Spring Boot 自动配置的原理&#xff0c;帮助你理解其工作机制&#xff0c;并能灵活运用…

网络原理1

协议 在网络通信中&#xff0c;协议是非常重要的概念。协议是在网络通信过程中的约定。发送方和接收方需要提前商量好数据的格式&#xff0c;才能确保正确进行沟通。 应用层协议 应用层&#xff0c;对应着应用程序&#xff0c;是跟我们程序员打交道最多的一层。调用操作系统…

【JSON-to-Video】设置背景视频片断

欢迎来到JSON转视频系列教程。今天要教大家如何添加背景视频片断&#xff0c;在视频制作中&#xff0c;巧妙运用背景视频&#xff0c;能为作品增添独特魅力。下面就为大家详细讲解具体步骤。 JSON转视频教程&#xff0c;添加背景视频片断 设置bgVideo字段 {"bgVideo"…

工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线

一、方案背景​ 在工地、矿山、工厂等高危作业场景&#xff0c;反光衣是保障人员安全的必备装备。但传统人工巡查存在效率低、易疏漏等问题&#xff0c;难以实现实时监管。AI智能分析网关V4基于人工智能技术&#xff0c;可自动识别人员着装状态&#xff0c;精准定位未穿反光衣…

Java垃圾回收机制深度解析:从理论到实践的全方位指南

Java垃圾回收(GC)是Java虚拟机(JVM)的核心功能&#xff0c;它自动管理内存分配与回收&#xff0c;避免了C/C中常见的内存泄漏问题。本文将深入剖析Java垃圾回收的工作原理、算法实现、收集器类型及调优策略&#xff0c;助你全面掌握JVM内存管理的精髓。 一、垃圾回收基础概念 …

实验设计与分析(第6版,Montgomery著,傅珏生译) 第9章三水平和混合水平析因设计与分式析因设计9.5节思考题9.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第9章三水平和混合水平析因设计与分式析因设计9.5节思考题9.1 R语言解题。主要涉及方差分析。 YieldDesign <-expand.grid(A gl(3, 1, labels c("-", "0","…