matlab练习程序(多圆交点)
最近总是对计算几何方面的程序比较感兴趣。
多圆求交点,要先对圆两两求交点。
有交点的圆分为相切圆和相交圆。
相切圆求法:
1.根据两圆心求直线
2.求公共弦直线方程
3.求两直线交点即两圆切点。
相交圆求法:
1.求公共弦方程直线。
2.公共弦直线方程和其中一个圆方程联立求解即可。
公共弦直线方程就是两圆方程的差。
结果如下:

matlab代码如下:
main.m:
clear all;close all;clc; n=;
cic=rand(n,); %(x,y,r) hold on;
for i=:n-
for j=i+:n
cic1=cic(i,:);
cic2=cic(j,:);
p=circleCross(cic1,cic2);
if ~isempty(p)
plot(p(:,),p(:,),'.');
end
end
end for i=:n
theta=:0.001:*pi;
x=cic(i,)+cic(i,)*cos(theta);
y=cic(i,)+cic(i,)*sin(theta);
plot(x,y,'-');
end
axis equal
circleCross.m:
function p=circleCross(cic1,cic2)
x0=cic1();
y0=cic1();
r0=cic1();
x1=cic2();
y1=cic2();
r1=cic2();
d=sqrt((x0-x1)^+(y0-y1)^); %两圆心距离
k1=(y0-y1)/(x0-x1); %连接两圆心直线
b1=y1-k1*x1;
k2=-/k1; %公共弦方程直线
b2=(r0^-r1^-x0^+x1^-y0^+y1^)/(*(y1-y0));
p=[];
if d==abs(r1-r0) || d==r1+r0 %相切时的交点
xx=-(b1-b2)/(k1-k2);
yy=-(-b2*k1+b1*k2)/(k1-k2);
p=[xx yy];
elseif abs(r1-r0)<d && d<r1+r0 %相交时的交点
%公共弦方程与其中一个圆的交点
xx1=(-b2* k2 + x1 + k2 *y1 - sqrt(-b2^ + r1^ + k2^ *r1^ - *b2* k2* x1 - k2^* x1^ + *b2*y1 + *k2*x1*y1 - y1^))/( + k2^);
yy1=k2*xx1+b2;
xx2=(-b2* k2 + x1 + k2 *y1 + sqrt(-b2^ + r1^ + k2^ *r1^ - *b2* k2* x1 - k2^* x1^ + *b2*y1 + *k2*x1*y1 - y1^))/( + k2^);
yy2=k2*xx2+b2;
p=[xx1 yy1;xx2 yy2];
end
end
多圆求交点我只能两两比较了,不知道有没有什么快速的方法。
matlab练习程序(多圆交点)的更多相关文章
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- matlab练习程序(多线段交点)
很简单的算法,这里是把每对线段都进行比较了. 还有一种似乎先通过x和y排序再进行交点判断的,不过那种方法我还没看太明白. 这里的方法如下: 1.根据线段的端点求两条直线的交点. 2.判断直线的交点是否 ...
- matlab练习程序(Ritter‘s最小包围圆)
原始算法是sphere,我这里简化为circle了. Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛. 该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bo ...
- matlab练习程序(矩形变换为圆)
最近对图像坐标的变换很感兴趣啊,这次是将一张图像变换为圆形. 变换原理就是按变换前后像素到圆心的距离按比例缩减就行了. 改变x,y方向上的系数,应该还可以变换为椭圆,不过我还没有尝试. 注意我这里相当 ...
- matlab练习程序(矩形变换为单连通形状)
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...
- matlab练习程序(全景图到穹顶图)
这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图 ...
- matlab练习程序(简单多边形的核)
还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
随机推荐
- linux+apache url大小写敏感问题
Linux对文件目录大小写敏感,URL大小写敏感会导致网页打不开,解决方法之一是启用Apache的mod_speling.so模块. 1.确认/usr/lib/httpd/modules目录下是否存在 ...
- LINQ to SQL更新数据库操作(转载)
使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...
- 关闭 ubuntu System program problem detected
每次开机都出现: System program problem detected 很麻烦,关闭方法: vim /etc/default/apport # set this to 0 to disabl ...
- sql导入默认用户解决杰奇cms无法登陆管理员账户问题
前些天下载杰奇cms来体验一下,从a5下载的杰奇1.8版,不是默认的安装程序,上传文件,手工导入sql数据库,修改了config配置文件,很快就完工了.前台可以展现,除了有些乱码显示之外,想要修改相关 ...
- 免费馅饼 Why WA
免费馅饼 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1576 Solved: 577 Description 都说天上不会掉馅饼,但有一天gameb ...
- CocoStudio基础教程(2)关联程序逻辑与cocoStudio导出文件
1.概述 上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有.这篇中我们把它们加进去,这样就可以算一个完整的程序了. 2.界面编辑 大部分 ...
- characterCustomezition的资源打包代码分析
using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; class Creat ...
- windows下的文件到linux下乱码 iconv 修改文件编码
conv [选项...] [文件...] 有如下选项可用: 输入/输出格式规范:-f, --from-code=名称 原始文本编码-t, --to-code=名称 输出编码 信息:-l, --list ...
- 2015安徽省赛 F.多重部分和问题
题目描述 有n种不同大小的数字,每种各个.判断是否可以从这些数字之中选出若干使它们的和恰好为K. 输入 首先是一个正整数T(1<=T<=100) 接下来是T组数据 每组数据第一行是一个正整 ...
- LSB 简介
前 Linux 的发行版非常繁多,为了促进 Linux 不同发行版间的兼容性,LSB(Linux Standards Base)开发了一系列标准,使各种软件可以很好地在兼容 LSB 标准的系统上运行, ...