2D空间中求两圆的交点

修改(加入包含和不相交情况的判断):
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CircleIntersect : MonoBehaviour
{
public Transform circleA;
public float radiusA = 1f;
public Transform circleB;
public float radiusB = 1f; public bool CalculateCircleIntersect(Vector3 c1p, Vector3 c2p, float c1r, float c2r, out Vector3 p0, out Vector3 p1)
{
//c1p = circle one position
//c1r = circle one radius var P0 = c1p;
var P1 = c2p; float d, a, h;
p0 = Vector3.zero;
p1 = Vector3.zero; d = Vector3.Distance(P0, P1); if (d > c1r + c2r) return false;
if (Vector3.Distance(c2p, c1p) + c1r < c2r) return false;
if (Vector3.Distance(c2p, c1p) + c2r < c1r) return false; a = (c1r * c1r - c2r * c2r + d * d) / ( * d); h = Mathf.Sqrt(c1r * c1r - a * a); Vector3 P2 = (P1 - P0);
P2 = (P2 * (a / d));
P2 = (P2 + P0); float x3, y3, x4, y4 = ; x3 = P2.x + h * (P1.y - P0.y) / d;
y3 = P2.y - h * (P1.x - P0.x) / d; x4 = P2.x - h * (P1.y - P0.y) / d;
y4 = P2.y + h * (P1.x - P0.x) / d; ; //out parameters for a line renderer
p0 = new Vector3(x3, y3, );
p1 = new Vector3(x4, y4, ); return true;
} void OnDrawGizmos()
{
if (circleA == null || circleB == null) return; var cacheColor = Gizmos.color; var p0 = default(Vector3);
var p1 = default(Vector3);
var isIntersect = CalculateCircleIntersect(circleA.position, circleB.position, radiusA, radiusB, out p0, out p1); if (isIntersect)
{
Gizmos.DrawWireSphere(p0, 0.1f);
Gizmos.DrawWireSphere(p1, 0.1f);
Gizmos.color = Color.red;
} Gizmos.DrawWireSphere(circleA.position, radiusA);
Gizmos.DrawWireSphere(circleB.position, radiusB); Gizmos.color = cacheColor;
}
}
2D空间中求两圆的交点的更多相关文章
- 2D空间中求一点是否在多边形内
参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...
- 2D空间中求线段与圆的交点
出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html 测试脚本(返回值 ...
- [译]2D空间中使用四叉树Quadtree进行碰撞检测优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...
- POJ 2546 & ZOJ 1597 Circular Area(求两圆相交的面积 模板)
题目链接: POJ:http://poj.org/problem? id=2546 ZOJ:problemId=597" target="_blank">http: ...
- Gym-101915B Ali and Wi-Fi 计算几何 求两圆交点
题面 题意:给你n个圆,每个圆有一个权值,你可以选择一个点,可以获得覆盖这个点的圆中,权值最大的m个的权值,问最多权值是多少 题解:好像是叙利亚的题....我们画画图就知道,我们要找的就是圆与圆交的那 ...
- 求两圆相交部分面积(C++)
已知两圆圆心坐标和半径,求相交部分面积: #include <iostream> using namespace std; #include<cmath> #include&l ...
- UVa 10674 (求两圆公切线) Tangents
题意: 给出两个圆的圆心坐标和半径,求这两个圆的公切线切点的坐标及对应线段长度.若两圆重合,有无数条公切线则输出-1. 输出是按照一定顺序输出的. 分析: 首先情况比较多,要一一判断,不要漏掉. 如果 ...
- hdu5858 Hard problem(求两圆相交面积)
题目传送门 Hard problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- 2D空间中判断一点是否在三角形内
要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...
随机推荐
- 笔记:FastAdmin 上传设置
笔记:FastAdmin 上传设置 FastAdmin 的上传设置为统一配置,在 application/extra/upload.php 中文件中. <?php //上传配置 return [ ...
- conda 与 pip 加速
conda和pip默认使用国外站点来下载软件,我们可以配置国内镜像来加速下载(国外用户无须此操作). 配置清华conda镜像 conda config --add channels https://m ...
- MIT-6.824 Raft协议
摘要 raft是一种比paxos容易理解的一致性算法,实现起来比paxos简单许多.本文前部分描述算法的细节,后部分尝试探讨下该算法的原理. 算法描述 raft算法之所以简单的原因之一是它将问题分解成 ...
- 从字符集发展史看Unicode和UTF-8的区别
从字符集发展史看Unicode和UTF-8的区别 版权声明 本文并非本人原创,其内容来源于网络,本文根据其演绎而来,具体出出已经无法考证,在这里只好给出我所参考的连接. 知乎 https://www. ...
- Maltego更新到4.1.6
Maltego更新到4.1.6 Maltego最近更新到4.1.6.由于Kali Linux软件源并没有提供此次更新包,用户需要进入Maltego进行手动更新.在起始页面中,双击状态栏右下角的黄色 ...
- 深港DJ好听的歌曲
好听女声 Dj陈爷-全中文全国语慢歌连版音乐挑选磁性女声翻唱慢摇串烧 http://www.vvvdj.com/play/154270.html DjPad仔-全中文国粤语Rnb音乐清风主流吃鸡学猫叫 ...
- rabbitmq使用(三)
Publish/Subscribe In the previous tutorial we created a work queue. The assumption behind a work que ...
- 虚拟机性能监控与故障处理工具------JDK的命令行工具
①jps:虚拟机进程状况工具 功能:列出正在运行的虚拟机进程,并显示1.虚拟机执行主类名称以及2.这些进程的本地虚拟机唯一ID(LVMID). 使用频率最高的JDK命令行工具,其他的JDK工具大多需要 ...
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- 设置TabBar图片
设置TabBar图片 // 拿到 TabBar 在拿到想应的item UITabBar *tabBar = _tabBarController.tabBar; UITabBarItem *item0 ...