一个简单的MATLAB脚本——快速行进算法(FMM))

一个简单的MATLAB脚本——快速行进算法(FMM)

介绍快速行进算法(FMM)的简单MATLAB脚本,不到20行代码实现快速行进算法的运算结果,而且计算速度非常快。给了两个实例模型来说明计算结果。

文章目录

  • 一个简单的MATLAB脚本——快速行进算法(FMM)
    • 一、计算结果
      • 1.1 模型一
      • 1.2 模型二
    • 二、MATLAB代码

一、计算结果

1.1 模型一

在坐标(10,10)处设置一个源点。
一个简单的MATLAB脚本——快速行进算法(FMM))_第1张图片
在模型中心设置一个大小为20X20的障碍体。
一个简单的MATLAB脚本——快速行进算法(FMM))_第2张图片
得到快速行进算法计算得到的区域。
一个简单的MATLAB脚本——快速行进算法(FMM))_第3张图片
将障碍体的值由0改为0.2。
一个简单的MATLAB脚本——快速行进算法(FMM))_第4张图片
重新快速行进算法计算。
一个简单的MATLAB脚本——快速行进算法(FMM))_第5张图片

1.2 模型二

这个模型与模型一相同,只是源点的位置为(10,10)改为(50,10),其他内容均不变。
一个简单的MATLAB脚本——快速行进算法(FMM))_第6张图片
一个简单的MATLAB脚本——快速行进算法(FMM))_第7张图片
一个简单的MATLAB脚本——快速行进算法(FMM))_第8张图片
一个简单的MATLAB脚本——快速行进算法(FMM))_第9张图片
一个简单的MATLAB脚本——快速行进算法(FMM))_第10张图片

二、MATLAB代码

模型一对应的MATLAB代码:

set(gcf,'rend','z');

A=inf*ones(100,100);
U=inf*ones(100,100);

A(10,10)=1;
U(10,10)=1;

B=fmm2d(A);
plt(B,50)
pause

F=ones(100,100);
F(40:60,40:60)=0;
plt(F)
pause

[B,U]=fmm2d(A,U,F);
B(isinf(B))=nan;
plt(B,50)
pause

F=ones(100,100);
F(40:60,40:60)=0.2;
plt(F)
pause

[B,U]=fmm2d(A,U,F);
plt(B,50)
pause

模型二对应的MATLAB代码

close all
clear 
clc

set(gcf,'rend','z');

A=inf*ones(100,100);
U=inf*ones(100,100);

A(50,10)=0;
U(50,10)=0;

B=fmm2d(A);
plt(B,50)
pause

F=ones(100,100);
F(40:60,40:60)=0;
plt(F)
pause

[B,U]=fmm2d(A,U,F);
% B(isinf(B))=nan;
plt(B,50)
pause

F=ones(100,100);
F(40:60,40:60)=0.1;
plt(F)
pause

[B,U]=fmm2d(A,U,F);
plt(B,50)
pause

具体代码我已打包成文件夹,在我的资源中下载即可。

你可能感兴趣的:(射线追踪,matlab,算法,开发语言)