matlab大规模交叉节点判断
来源:互联网 发布:笔记软件 编辑:程序博客网 时间:2024/06/03 16:29
Q:给出所有点连接关系(矩阵形式)及节点坐标,找出所有交叉节点
idea:
1缩小范围
四点判断(a-b,c-d),排除①a和b的经度(纬度)最大值<c和d的经度(纬度)最小值②a和b的经度(纬度)最小值>c和d的经度(纬度)最大值的情况
basic knowledge:经度东>西,纬度北>南
如图,经度:max(a,b)<min(c,d),不可能相交
2.利用两边斜率排除平行状况
3.求解方程组,得出交点坐标
https://wenku.baidu.com/view/9e769d1dc5da50e2524d7f21.html
4.判断交点在四点中心范围(利用经纬度),便记录下来
1 %% 寻找没名字的交叉点 输入矩阵 名字 坐标 输出 矩阵 名字 坐标 2 %crosss 序号一-序号二 序号三-序号四 在矩阵中j位置 在矩阵中i位置 3 % juzhen:direction 4 % lon_lat:node's coordinate 5 function [lon_lat_new,crosss]=findcrossbilibili(juzhen,lon_lat) 6 %% matrix to list:num x1 y1 x2 y2 7 count=0; 8 for i1=1:size(juzhen,1) 9 for i2=1:size(juzhen,2)10 if juzhen(i1,i2)==111 count=count+1;12 num(count,1)=i1;13 num(count,2)=i2;14 end15 end16 end17 % edge1:x1,y1 edge2:x2,y218 for i=1:size(num,1)19 x1(i,1)=lon_lat(num(i,1),1);20 y1(i,1)=lon_lat(num(i,1),2);21 x2(i,1)=lon_lat(num(i,2),1);22 y2(i,1)=lon_lat(num(i,2),2);23 end24 %% itself circle itself25 count=0;26 for j=1:size(x1,1)-127 for i=1+j:size(x1,1)28 % shrink hunting zone29 if (min(x1(j,1),x2(j,1))>max(x1(i,1),x2(i,1)))||(max(x1(j,1),x2(j,1))<min(x1(i,1),x2(i,1)))||(min(y1(j,1),y2(j,1))>max(y1(i,1),y2(i,1)))||(max(y1(j,1),y2(j,1))<min(y1(i,1),y2(i,1)))30 % exclude the situation that one node of two edges31 elseif ((x1(j,1)==x1(i,1))&&(y1(j,1)==y1(i,1)))||((x1(j,1)==x2(i,1))&&(y1(j,1)==y2(i,1)))||((x2(j,1)==x1(i,1))&&(y2(j,1)==y1(i,1)))||((x2(j,1)==x2(i,1))&&(y2(j,1)==y2(i,1)))32 else33 k1=(y2(i,1)-y1(i,1))/(x2(i,1)-x1(i,1));34 k2=(y2(j,1)-y1(j,1))/(x2(j,1)-x1(j,1));35 % exclude equal slope36 if k1~=k237 % slove cross node's coordinate38 A=[k1,-1;k2,-1];39 b=[k1*x1(i,1)-y1(i,1);k2*x1(j,1)-y1(j,1)];40 Jie=inv(A)*b;41 % confirm cross node in the middle of four nodes again????42 if ((Jie(1,1)<max(x1(i,1),x2(i,1))&&Jie(1,1)>min(x1(i,1),x2(i,1)))&&(Jie(1,1)<max(x1(j,1),x2(j,1))&&Jie(1,1)>min(x1(j,1),x2(j,1))))&&((Jie(2,1)<max(y1(i,1),y2(i,1))&&Jie(2,1)>min(y1(i,1),y2(i,1)))&&(Jie(2,1)<max(y1(j,1),y2(j,1))&&Jie(2,1)>min(y1(j,1),y2(j,1))))43 count=count+1;44 lon_lat_new(count,1)=Jie(1,1);% new cross coordinate45 lon_lat_new(count,2)=Jie(2,1);46 % record cross node's cross edge to checkout47 crosss(count,1)=num(j,1);% four cross nodes48 crosss(count,2)=num(j,2);49 crosss(count,3)=num(i,1);50 crosss(count,4)=num(i,2);51 crosss(count,5)=j;52 crosss(count,6)=i;53 end54 end55 end56 end57 end58 end
阅读全文
0 0
- matlab大规模交叉节点判断
- 使用matlab交叉验证
- crossvalind Matlab 交叉验证
- matlab libsvm 交叉验证
- crossvalind Matlab 交叉验证
- crossvalind Matlab 交叉验证
- 交叉验证 matlab实现
- 判断时间是否交叉
- 关于时间交叉判断
- 线性数据交叉判断
- 【matlab学习笔记】交叉验证
- 素数筛法-----》大规模的判断素数
- 判断treeView节点等级
- 单链表判断公共节点
- 判断节点类型
- 查找两个链表的交叉节点
- leetcode之返回交叉的节点
- 找两个单链表的交叉节点
- 1032. 挖掘机技术哪家强(20)
- matlab 大量数据写入excel
- TensorFlow小试牛刀(2):GAN生成手写数字
- makefile基本结构
- Group by and Order by
- matlab大规模交叉节点判断
- ESP8266模块使用,环境搭建,编译和烧录
- 前进杀蝙蝠--简单递归
- 【Python】dlib实现视频中人脸68特征点提取
- 【C++】模拟实现STL中的list
- c++之旅———开始
- leetcode 8. String to Integer (atoi)
- HTTP协议
- 使用脚本自动化安装MySQL/MariaDB