大家好,又见面了,我是你们的朋友全栈君。
很简单的算法,这里是把每对线段都进行比较了。
还有一种似乎先通过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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107099.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...