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 ...
随机推荐
- 9个 SSH常用命令选项
9个 SSH常用命令选项 SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议.使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息.要使用 SS ...
- LINUX下 my.cnf php.ini的位置
my.cnf:/etc/ php.in:/usr/local/php/etc/
- ubuntu系统自带的火狐(firefox)如何安装Adobe Flash
当你刚装完系统,发现打开某些网站时,提示你“需要安装flash”,然后你点击确定,过了一会,提示你安装失败. 我也是遇到这种情况.我第一个反应是,我先不用firefox,我安装chrome. 可是当你 ...
- xpath基础知识
相关链接: http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html 自动生成xpath的工具: http://blog.s ...
- 注意页面上的时间戳可能会成为bd快照的时间_快照不更新的原因
之前在创建内容的时候,为了提高说服力,添加了一个原始文章的地址**.com.cn/2013-08/22/content_**.htm,当时写文章是在12月份,单快照直接变成原始文章的时间戳8.22
- =============Python安装与使用================
用文本编辑器写Python程序,然后保存为后缀为.py的文件,就可以用Python直接运行这个程序了. Python的交互模式和直接运行.py文件有什么区别呢? 直接输入python进入交互模式,相当 ...
- 黑色30s高并发IIS设置
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- Python爬虫经验
有时候读取同一个url,服务器可能会返回不同的response,并不是爬虫程序代码的问题,而是服务器的问题,初次试验request时,最好 把response文本保存在一个txt文件当中,以便后续的比 ...
- shell脚本的调试技巧
请参考文章:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html 读后的感觉,还是用shell的选项灵活,方便. ...
- 修改setup.py的源
方法一: 修改文件 ~/.pydistutils.cfg为: [easy_install] index_url = http://pypi.douban.com/simple 方法二: 直接在setu ...