最近总是对计算几何方面的程序比较感兴趣。

多圆求交点,要先对圆两两求交点。

有交点的圆分为相切圆和相交圆。

相切圆求法:

  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练习程序(多圆交点)的更多相关文章

  1. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  2. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  3. matlab练习程序(多线段交点)

    很简单的算法,这里是把每对线段都进行比较了. 还有一种似乎先通过x和y排序再进行交点判断的,不过那种方法我还没看太明白. 这里的方法如下: 1.根据线段的端点求两条直线的交点. 2.判断直线的交点是否 ...

  4. matlab练习程序(Ritter‘s最小包围圆)

    原始算法是sphere,我这里简化为circle了. Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛. 该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bo ...

  5. matlab练习程序(矩形变换为圆)

    最近对图像坐标的变换很感兴趣啊,这次是将一张图像变换为圆形. 变换原理就是按变换前后像素到圆心的距离按比例缩减就行了. 改变x,y方向上的系数,应该还可以变换为椭圆,不过我还没有尝试. 注意我这里相当 ...

  6. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  7. matlab练习程序(全景图到穹顶图)

    这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图 ...

  8. matlab练习程序(简单多边形的核)

    还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...

  9. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

随机推荐

  1. linux tail命令的使用方法详解(转)

    本文介绍Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新 ...

  2. linux下的视频音频播放器终极解决方案

    要使用(启用)rpmfusion, 一定要先启用enable epel包: Important notes You need to enable EPEL on RHEL 5 & 6 or c ...

  3. Linux CP文件夹略过目录的解决

    在Ubuntu Linux复制文件夹时出现一个问题,做个笔记,希望能给刚入门的菜鸟学习一下(见图1). 出现略过目录: www_linuxidc_com@linuxidc-Aspire-3680:~$ ...

  4. 昂贵的聘礼(dijkstra)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38549   Accepted: 11158 Descripti ...

  5. Integer Inquiry

    Integer Inquiry Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Sub ...

  6. cocos基础教程(9)声音和音效

    使用音效引擎 我们可以使用Cocos2d-x自带的CocosDension库来使用声音引擎.CocosDesion实现了简单易用的SimpleAudioEngine类,为了使用它,我们只需引入他的头文 ...

  7. Vim的使用方法

    导读 Vim是从vi发展出来的一个文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器. 一.vi.vim介绍 ...

  8. [BZOJ1163][BZOJ1339][Baltic2008]Mafia

    [BZOJ1163][BZOJ1339][Baltic2008]Mafia 试题描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用 ...

  9. LNK2005 连接错误解决办法

    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@ ...

  10. SublimeText3 生成html标签快捷键

    mmet Documentation Syntax Child: > nav>ul>li <nav> <ul> <li></li> & ...