【发布时间】:2014-07-29 10:56:40
【问题描述】:
你好,这是我在这里的第一篇文章。我想为 Delaunay 三角测量编写 matlab 脚本。这是我的脚本:
clear all;clc
%% Delaunay
x=[ 160.1671 366.9226 430.7894 540.1208 660.2771 508.7287 252.1787];
y=[ 223.9615 259.5000 120.5769 245.5000 283.1923 472.7308 469.5000];
%
x=x';
y=y';
%orginal plot
dd=delaunay(x,y);
dt=TriRep(dd,x,y);
triplot(dt);
z=[x.^2+y.^2]
i=1:length(x);
ptk=[i' x y]
%% main loop
l=0;
for i=1:length(x)-2
for j=1+i:length(x)
for k=1+i:length(x)
if (j ~= k)
l=l+1;
xn = (y(j)-y(i))*(z(k)-z(i)) - (y(k)-y(i))*(z(j)-z(i));
yn = (x(k)-x(i))*(z(j)-z(i)) - (x(j)-x(i))*(z(k)-z(i));
zn = (x(j)-x(i))*(y(k)-y(i)) - (x(k)-x(i))*(y(j)-y(i));
if (zn < 0)
border=zn;
for m=1:length(x)
border = (border) & ...
((x(m)-x(i))*xn +...
(y(m)-y(i))*yn +...
(z(m)-z(i))*zn <= 0);
if (border)
ii(m)=[i];
jj(m)=[j];
kk(m)=[k];
end
end
end
end
end
end
end
wart=[ii' jj' kk']
dd
figure(2)
triplot(wart,x,y)
这是我应该从这个脚本中得到的。这个矩阵是作为 delaunay() matlab 函数生成的:
dd =
6 7 2
7 1 2
4 6 2
1 3 2
4 3 5
6 4 5
2 3 4
这是我从实施中得到的:
wart =
4 7 6
4 7 5
4 7 5
4 7 5
4 7 5
4 6 5
4 6 5
谁能告诉我这有什么问题?哪里有错误或只是指导我?
jils.
【问题讨论】:
-
注释对于在语义级别上理解代码至关重要。例如:您正在使用负双精度值初始化边框,但随后将其用作逻辑值。初始化
border=false将具有相同的效果。目的是什么? -
我想是的。我正在编写这个 C 程序的 matlab 脚本:fatcat.ftj.agh.edu.pl/~kaprzyk/Geomkomp/geomkomp/node58.html 但是,这个脚本在 delaunay 函数和 C 程序之间产生了差异。 Java 中也有类似的实现:stackoverflow.com/questions/5825089/…
-
@jiksu:
border=(zn < 0);是 c 代码的正确翻译。