出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html

测试脚本(返回值为交点数量):

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class LineCircleIntersect : MonoBehaviour
{
public Transform a;
public Transform b; public Transform circleCenter;
public float radius; void OnDrawGizmos()
{
if (a == null || b == null || circleCenter == null) return; var intersect1 = default(Vector2);
var intersect2 = default(Vector2);
var intersectCount = BetweenLineAndCircle(circleCenter.position, radius, a.position, b.position, out intersect1, out intersect2); if (intersectCount > )
Gizmos.DrawWireSphere(intersect1, 0.1f); if (intersectCount > )
Gizmos.DrawWireSphere(intersect2, 0.1f); Gizmos.DrawLine(a.position, b.position);
Gizmos.DrawWireSphere(circleCenter.position, radius);
} int BetweenLineAndCircle(
Vector2 circleCenter, float circleRadius,
Vector2 point1, Vector2 point2,
out Vector2 intersection1, out Vector2 intersection2)
{
float t; var dx = point2.x - point1.x;
var dy = point2.y - point1.y; var a = dx * dx + dy * dy;
var b = * (dx * (point1.x - circleCenter.x) + dy * (point1.y - circleCenter.y));
var c = (point1.x - circleCenter.x) * (point1.x - circleCenter.x) + (point1.y - circleCenter.y) * (point1.y - circleCenter.y) - circleRadius * circleRadius; var determinate = b * b - * a * c;
if ((a <= 0.0000001) || (determinate < -0.0000001))
{
// No real solutions.
intersection1 = Vector2.zero;
intersection2 = Vector2.zero;
return ;
}
if (determinate < 0.0000001 && determinate > -0.0000001)
{
// One solution.
t = -b / ( * a);
intersection1 = new Vector2(point1.x + t * dx, point1.y + t * dy);
intersection2 = Vector2.zero;
return ;
} // Two solutions.
t = (float)((-b + Mathf.Sqrt(determinate)) / ( * a));
intersection1 = new Vector2(point1.x + t * dx, point1.y + t * dy);
t = (float)((-b - Mathf.Sqrt(determinate)) / ( * a));
intersection2 = new Vector2(point1.x + t * dx, point1.y + t * dy); return ;
}
}

2D空间中求线段与圆的交点的更多相关文章

  1. 2D空间中求一点是否在多边形内

    参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...

  2. 2D空间中求两圆的交点

    出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-colli ...

  3. [译]2D空间中使用四叉树Quadtree进行碰撞检测优化

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...

  4. 2D空间中判断一点是否在三角形内

    要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...

  5. 2d游戏中求出一个向量的两个垂直向量

    function cc.exports.VerticalVector(vec)--求出两个垂直向量 local result = {} result[1] = cc.p(vec.y/vec.x,-1) ...

  6. HDU 3467 (求五个圆相交面积) Song of the Siren

    还没开始写题解我就已经内牛满面了,从晚饭搞到现在,WA得我都快哭了呢 题意: 在DotA中,你现在1V5,但是你的英雄有一个半径为r的眩晕技能,已知敌方五个英雄的坐标,问能否将该技能投放到一个合适的位 ...

  7. java求两个圆相交坐标

    最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...

  8. HDU 5572--An Easy Physics Problem(射线和圆的交点)

    An Easy Physics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  9. Gym - 101617F :Move Away (圆的交点)

    pro:给定N个圆,求离原点最远的点,满足它在N个圆里.输出这个距离.N<50; sol:关键点一定是圆与圆的交点. 圆与 圆心到原点的直线 的交点. 然后去验证这些关键点是否在N个圆内. 实际 ...

随机推荐

  1. BZOJ2243 洛谷2486 [SDOI2011]染色 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2243 题目传送门 - 洛谷2486 题意概括 一棵树,共n个节点. 让你支持以下两种操作,共m次操 ...

  2. Mistwald POJ

    一开始看不出来是快速幂矩阵的题目 先要把整个地图离散化为1,2,3,4,.... 连成一个有向图 邻接矩阵的平方意为:假如a->b  且b->c     那么一次平方后   a->c ...

  3. centos 支持复制与粘贴

    centos 要支持与主机的交互,vmtools 必不可少. 为了方便虚拟机和主机之间复制粘贴文件,拖拽文件,需要安装VMwareTools.下面将我的安装步骤记录如下:第一步:打开虚拟机后,在VM的 ...

  4. 基本功 | Litho的使用及原理剖析

    1. 什么是Litho? Litho是Facebook推出的一套高效构建Android UI的声明式框架,主要目的是提升RecyclerView复杂列表的滑动性能和降低内存占用.下面是Litho官网的 ...

  5. sicp 习题

    1.11 求f(n)=f(n-1)+2*f(n-2)+3*f(n-3) #lang racket (define (fff n) (define (fff-iter a b c n) (if (= n ...

  6. luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索

    题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...

  7. 2845 ACM 豆子 beans

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2845 题意:吃豆子游戏 , 当你吃了一个格子的豆子 , 该格子左右两个和上下两行就不能吃了 , 输入每个格 ...

  8. Flask启动原理,源码流程分析

    1.执行Flask的实例对象.run()方法 from flask import Flask,request,session app = Flask(__name__) app.secret_key ...

  9. javascript中的LHS与RHS

    最近在学习javascript过程中,接触了LHS与RHS的概念,刚开始的时候有点理解不清,现在做一些梳理,方便以后进行理解. LHS与RHS:javascript引擎的两种查找类型,含义是赋值操作的 ...

  10. Android笔记(六):线程及线程通信

    线程 由于Android的Activity中默认所有代码都在主线程(UI线程)中执行,如果在这里面执行耗时任务(例如下载),界面就会无反应且不可操作,直到耗时任务执行完毕. 如果想在执行耗时任务的同时 ...