DATA = int32(xlsread('bus685.xlsx',1,'A1:B1282'))+1;
position =xlsread('position.xlsx',1,'A1:B685');
K_r = 0.1;
K_s = 0.025;
L = 2;
delta_t = 10;
MaxLength =8;
tic
for k = 1:100
force = zeros(685,2);
for m = 2:684
for n = m+1:685
dx = position(n,1)-position(m,1);
dy = position(n,2)-position(m,2);
if dx~=0 || dy~=0
dist2 = dx^2+dy^2;
dist = sqrt(dist2);
f = K_r/dist2;
fx = f*dx/dist;
fy = f*dy/dist;
force(m,1) = force(m,1)-fx;
force(m,2) = force(m,2)-fy;
force(n,1) = force(n,1)+fx;
force(n,2) = force(n,2)+fy;
end
end
end
for m = 2:685
ne=find(DATA(:,1)==m);
for n = 1:length(ne)
dx = position(DATA(ne(n),2),1)-position(m,1);
dy = position(DATA(ne(n),2),2)-position(m,2);
if dx~=0||dy~=0
dist = sqrt(dx^2+dy^2);
f = K_s*(dist-L);
fx = f*dx/dist;
fy = f*dy/dist;
force(m,1) = force(m,1)+fx;
force(m,2) = force(m,2)+fy;
force(DATA(ne(n),2),1) = force(DATA(ne(n),2),1)-fx;
force(DATA(ne(n),2),2) = force(DATA(ne(n),2),2)-fy;
end
end
end
for i = 2:685
dx = delta_t*force(i,1);
dy = delta_t*force(i,2);
displacement = dx^2+dy^2;
if(displacement>MaxLength)
s = sqrt(MaxLength/displacement);
dx = s*dx;
dy = s*dy;
end
position(i,1) = position(i,1)+dx;
position(i,2) = position(i,2)+dy;
end
end
toc
for i = 1:1282
s = DATA(i,1);
d = DATA(i,2);
x = [position(s,1);position(d,1)];
y = [position(s,2);position(d,2)];
plot(x,y,'o-b');
hold on;
end
sum = 0;
for j = 1:685
sum = sum+abs(force(j,1))+abs(force(j,2));
end
sum
没有合适的资源?快使用搜索试试~ 我知道了~
力导向图force-direct算法(MATLAB实现)含数据集
共2个文件
m:1个
xlsx:1个
1星 需积分: 50 52 下载量 34 浏览量
2018-01-17
19:48:22
上传
评论 2
收藏 23KB ZIP 举报
温馨提示
这是山东大学可视化课程的一个项目,用MATLAB实现的力导向图算法,请不要随意更改代码中的参数和数据集
资源推荐
资源详情
资源评论
收起资源包目录
力导向图.zip (2个子文件)
bus685.xlsx 26KB
VIS.m 2KB
共 2 条
- 1
资源评论
- egameisok2023-06-17少了位置文件position.xlsx无法运行啊?程序里也没有说位置随机生成啊? #运行出错
- hacker20172019-01-23少了位置文件position.xlsx无法运行啊 差差差想养一只雪狐2019-01-30position.xlsx里面存放的是点的位置,这个是要自己随机生成的,给出来就没啥意义了
想养一只雪狐
- 粉丝: 162
- 资源: 49
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功