matlab练习程序(求n线段交点)

很简单的算法,这里是把每对线段都进行比较了。

还有一种似乎先通过x和y排序再进行交点判断的,不过那种方法我还没看太明白。

这里的方法如下:

1.根据线段的端点求两条直线的交点。

2.判断直线的交点是否在两条线段上。

结果如下:

matlab代码如下:

clear all;close all;clc;

n=20;
p=rand(n,4);        %(x1,y1,x2,y2)线段两端点

for i=1:n
    pbar=p(i,:);
    pbar=reshape(pbar,[2,2]);
    line(pbar(1,:),pbar(2,:));
end

hold on;
for i=1:n-1
    p1=p(i,:);
    k1=(p1(2)-p1(4))/(p1(1)-p1(3));
    b1=p1(2)-k1*p1(1);
    for j=i+1:n
        p2=p(j,:);
        k2=(p2(2)-p2(4))/(p2(1)-p2(3));
        b2=p2(2)-k2*p2(1);

        x=-(b1-b2)/(k1-k2);             %求两直线交点
        y=-(-b2*k1+b1*k2)/(k1-k2);
                                        %判断交点是否在两线段上
        if min(p1(1),p1(3))<=x && x<=max(p1(1),p1(3)) && ...
           min(p1(2),p1(4))<=y && y<=max(p1(2),p1(4)) && ...
           min(p2(1),p2(3))<=x && x<=max(p2(1),p2(3)) && ...
           min(p2(2),p2(4))<=y && y<=max(p2(2),p2(4))
            plot(x,y,‘.‘);
        end
    end
end
时间: 2024-10-14 00:11:10

matlab练习程序(求n线段交点)的相关文章

Qt中求两线段交点

QPointF MapEditor::getIntersectPos(QPointF posA, QPointF posB, QPointF posC, QPointF posD)//返回AB与CD交点,无交点返回(0,0) { QLineF line1(posA, posB); QLineF line2(posC, posD); QPointF interPos(0,0); QLineF::IntersectType type = line1.intersect(line2, &interPo

POJ2826 An Easy Problem?!(线段交点,三角形面积)

题目链接: http://poj.org/problem?id=2826 题目描述: An Easy Problem?! Description It's raining outside. Farmer Johnson's bull Ben wants some rain to water his flowers. Ben nails two wooden boards on the wall of his barn. Shown in the pictures below, the two b

poj1039——计算几何 求直线与线段交点,判断两条直线是否相交

poj1039——计算几何  求直线与线段交点,判断两条直线是否相交 Pipe Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9439   Accepted: 2854 Description The GX Light Pipeline Company started to prepare bent pipes for the new transgalactic light pipeline. During the de

谈谈&quot;求线段交点&quot;的几种算法(js实现,完整版)

"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法总结一下, 希望对大家有所帮助. 本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 嘎嘎 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) =============================== 算法一: 求两条线段所在直线的交点, 再

求线段交点&quot;的几种算法(js实现,完整版)

"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说, 希望对大家有所帮助. 本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 嘎嘎 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) 算法一: 求两条线段所在直线的交点, 再判断交点是否在两条线段上. 求直线交点时 我们可通过直线的一般方程

matlab练习程序(旋转、径向模糊)

还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到旋转模糊. 一看代码就能全部明白,不仔细解释了. 原图如下: 处理后效果: matlab代码如下: clear all;close all;clc img=imread('lena.jpg'); [h w]=size(img); imshow(img) imgn=zeros(h,w); for y=

matlab练习程序(三点确定圆)

中学内容. 三角形两边的垂直平分线就能确定圆. 结果如下: matlab代码如下: clear all;close all;clc; p=rand(3,2); cen1=(p(1,:)+p(2,:))/2; %三角形一条边中点 cen2=(p(2,:)+p(3,:))/2; %另一条边中点 k1=-1/((p(1,2)-p(2,2))/(p(1,1)-p(2,1))); %一条边垂直平分线 b1=cen1(2)-k1*cen1(1); k2=-1/((p(2,2)-p(3,2))/(p(2,1)

求两条线段交点zz

"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说, 希望对大家有所帮助. 本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 嘎嘎 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) =============================== 算法一: 求两条线段所在直线的交点, 再判

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

matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图如下(这篇论文上的): 下面我再结合自己的程序,表述一遍吧: 1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率. 3.