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;
public float crossRadius = 0.5f;//交点圆圈大小 void OnDrawGizmos() {
if (a == null || b == null || circleCenter == null)
return; //交点1
var intersect1 = default(Vector2);
//交点2
var intersect2 = default(Vector2);
var intersectCount = BetweenLineAndCircle(circleCenter.position, radius, a.position, b.position, out intersect1, out intersect2); if (intersectCount > 0)
Gizmos.DrawWireSphere(intersect1, crossRadius); if (intersectCount > 1)
Gizmos.DrawWireSphere(intersect2, crossRadius); Gizmos.DrawLine(a.position, b.position);
Gizmos.DrawWireSphere(circleCenter.position, radius);
} /// <summary>
///
/// </summary>
/// <param name="circleCenter"></param>
/// <param name="circleRadius"></param>
/// <param name="point1"></param>
/// <param name="point2"></param>
/// <param name="intersection1">交点1</param>
/// <param name="intersection2">交点2</param>
/// <returns></returns>
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 = 2 * (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 - 4 * a * c;
if ((a <= 0.0000001) || (determinate < -0.0000001)) {
//没有交点的情况
intersection1 = Vector2.zero;
intersection2 = Vector2.zero;
return 0;
} if (determinate < 0.0000001 && determinate > -0.0000001) {
//一个交点的情况
t = -b / (2 * a);
intersection1 = new Vector2(point1.x + t * dx, point1.y + t * dy);
intersection2 = Vector2.zero;
return 1;
} //两个交点的情况
t = ((-b + Mathf.Sqrt(determinate)) / (2 * a));
intersection1 = new Vector2(point1.x + t * dx, point1.y + t * dy);
t = ((-b - Mathf.Sqrt(determinate)) / (2 * a));
intersection2 = new Vector2(point1.x + t * dx, point1.y + t * dy); return 2;
}
}

Unity 向量和圆的交点 相交的更多相关文章

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

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

  2. 【4opencv】求解向量和轮廓的交点

    在“学习OpenCV3"的QQ群众,网友且行且珍惜针对前期博客(https://www.cnblogs.com/jsxyhelu/p/9345590.html)中的内容提出了以下问题: 比如 ...

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

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

  4. Unity绘制圆和缓动雷达图

    Unity绘制圆和缓动雷达图 之前在做UI模块的时候遇到过需要做雷达图的效果,所以简单复习了一下 关于网格绘制 我们都知道Unity绘制图形是通过Mesh网格添加顶点进行绘制,那么知道顶点信息后如何实 ...

  5. 简单几何(直线与圆的交点) ZOJ Collision 3728

    题目传送门 题意:有两个一大一小的同心圆,圆心在原点,大圆外有一小圆,其圆心有一个速度(vx, vy),如果碰到了小圆会反弹,问该圆在大圆内运动的时间 分析:将圆外的小圆看成一个点,判断该直线与同心圆 ...

  6. hdu 5130(2014广州 圆与多边形相交模板)

    题意:一个很多个点p构成的多边形,pb <= pa * k时p所占区域与多边形相交面积 设p(x,y),       (x - xb)^2+(y - yb)^2 / (x - xa)^2+(y ...

  7. 2D空间中求线段与圆的交点

    出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html 测试脚本(返回值 ...

  8. 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板

    链接:https://www.nowcoder.com/acm/contest/141/J来源:牛客网 Eddy has graduated from college. Currently, he i ...

  9. unity, 鼠标与场景交点

    在鼠标与场景交点上放一个mark,并于1s后消失: 新建一个空GameObject,命名为moushHitTest,添加下面脚本: using UnityEngine;using System.Col ...

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

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

随机推荐

  1. 【BUG】nuget restore遇到的两个报错“Failed to load msbuild Toolset”和“当前 .NET SDK 不支持将 .NET 6.0 设置为目标”

    出错环境: Visual Studio 2019 1. Failed to load msbuild Toolset 解决:https://github.com/NuGet/Home/issues/4 ...

  2. 【经验】VMware|Ubuntu虚拟机连不上网的解决办法(网络重启大法+NAT模式注意开启服务)

    我的版本:Ubuntu20.04.04,iso是清华镜像站的release版本. 问题:NAT模式没有网络连接图标,或者图标闪一下就消失不见,并且无法获取IP地址:但是桥接模式的网络服务却是正常的. ...

  3. 原生JS表格数据常用总结

    主要是在数据报表这块, 做了好几年发现, 其实用户最终想要看的并不是酷炫的BI大屏, 而是最基础也是最复杂的 中国式报表. 更多就是倾向于从表格中去获取数据信息, 最简单的就是最好的, 于是还是来总结 ...

  4. 移动端H5页面在不同Android和iOS设备上的兼容适配

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  5. 启用 Java AOT 编译打包 Solon 项目(Solon AOT)

    1.Java 的 AOT(Ahead-Of-Time) AOT(Ahead-Of-Time)编译是与 JIT(Just-In-Time)相对的一种编译方式. 在 AOT 模式下,Java 字节码(By ...

  6. odoo备份数据库无法还原问题解决:Command 'pg_dump' not found.

    背景景:ubuntu20.04 上用命令安装postgresql后,odoo备份数据库报如下错误 安装命令:sudo apt-get install postgresql 默认安装:14版本的pg 错 ...

  7. 代码随想录第三天 | 链表part01

    链表理论基础 建议:了解一下链表基础,以及链表和数组的区别 文章链接:https://programmercarl.com/链表理论基础.html 不是很了解链表和数组区别的可以先看看以上的文章. 2 ...

  8. 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences

    题意描述 每个栅栏是一条无向边,找出字典序最小的欧拉路.数据保证至少有一个解. 最多 \(500\) 个点, \(1024\) 条边. 分析 看着如此微小的数据范围,随便瞎搞都行使用矩阵来存储边,同时 ...

  9. 资深育儿专家智能体,AI都已经涉及这块了?

    本文由 ChatMoney团队出品 介绍说明 在育儿的道路上,您是否常常感到迷茫和无助?面对孩子的成长问题.教育难题以及各种突发状况,您是否渴望有一位专业的导师为您指引方向?现在,让资深育儿专家智能体 ...

  10. 基于.net6的一款开源的低代码、权限、工作流、动态接口平台

    一款开源的低代码.权限.工作流.动态接口平台. 主要功能模块:工作流.权限管理.低代码.动态表单.动态接口.动态数据源 功能展示 因为个人时间非常有限,框架目前很多细节可能没完善.且前端有些代码写的不 ...