안녕하세요. 내 첫 번째 게시물입니다. Delaunay 삼각 측량을위한 matlab 스크립트를 작성하고 싶습니다. 여기 내 스크립트가 있습니다 :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)
이것은이 스크립트에서 얻은 것입니다. 이 행렬은 들로네() 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를 음의 double 값으로 초기화하지만 논리 값으로 사용됩니다. 'border = false'를 초기화하는 것과 같은 효과가 있습니다. 무엇을 의도합니까? – Daniel
나는 그렇게 생각한다. 나는이 C 프로그램의 matlab 스크립트를 작성 중이다 : http://fatcat.ftj.agh.edu.pl/~kaprzyk/Geomkomp/geomkomp/node58.html 그러나이 스크립트는 지연 일 함수와 C 프로그램 사이에 차이가있다. 유사한 구현이 Java로 제공됩니다. http://stackoverflow.com/questions/5825089/how-does-this-code-for-delaunay-triangulation-work – jilsu
@jiksu :'border = (zn <0) ; '는 C 코드의 올바른 번역입니다. – Daniel