很簡單的演算法,這裡是把每對線段都進行比較了。
還有一種似乎先通過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
,:));
endhold 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,'.
');endend
end
matlab練習程式(DBSCAN)
和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...
matlab練習程式(c c 呼叫matlab)
就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...
matlab練習程式(SUSAN檢測)
susan運算元既可以檢測角點也可以檢測邊緣,不過角點似乎比不過harris,邊緣似乎比不過canny。不過思想還是有點意思的。主要思想就是 首先做乙個和原影象等大的目標影象。然後用乙個圓形的模板,用模板去遍歷原影象每個畫素,把模板內的每個畫素都和模板中心畫素比較,如果灰度小於乙個閾值,那麼就對目標...