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 ...
随机推荐
- apache-tomcat-5.5.35.搭建实战
tar xf apache-tomcat-5.5.35.tar -C /usr/local/ 需要安装JDK支持,可借鉴:http://www.cnblogs.com/zhoulf/archive/2 ...
- WPF 窗口在右下角出现,识别分辨率
直接上代码. Point brp = SystemParameters.WorkArea.BottomRight;//当前桌面右下角的位置
- Java-UDP Socket编程
UDP 的 Java 支持 UDP 协议提供的服务不同于 TCP 协议的端到端服务,它是面向非连接的,属不可靠协议,UDP 套接字在使用前不需要进行连接.实际上,UDP 协议只实现了两个功能: 在 I ...
- 关于markdown需要澄清的一些误解
关于markdown需要澄清的误解: 首先, 最大的一个误解就是 转义! markdown不支持对小于号 < 的转义, 如 \<"pre">, 这时候仍然会认为是 ...
- 山东省第四届acm.Rescue The Princess(数学推导)
Rescue The Princess Time Limit: 1 Sec Memory Limit: 128 MB Submit: 412 Solved: 168 [Submit][Status ...
- Parencodings(imitate)
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20679 Accepted: 12436 De ...
- java笔记--关于线程通信
关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...
- sql把表格拼成字符串,多半使用于GROUP BY
--假定要聚合的字段是id ,要统计的字段是tname --select a.tname from @T1 a for xml path('row') select id,REPLACE(replac ...
- java笔试三
请问如何不使用第三个变量交换两个变量值? 例如 int a=5,b=10: 如何不使用第三个变量交换a,b的值? public class T { public static ...
- 关于 datasnap Stream的英文博客能容
转载:http://blogs.embarcadero.com/jimtierney/2009/04/06/31461/ DataSnap Server Method Stream Parameter ...