이 문제를 해결하는 가장 간단한 방법은 한 메쉬에서 다른 메쉬로 보간하는 것입니다. 이러한 접근법은 하나가 다른 노드보다 더 잘 해결 될 때 또는 개별 노드의 결과가 아니라 전체 요소의 전반적인 패턴에 관심이있을 때 잘 작동합니다. 그렇지 않은 경우 두 삼각형의 모든 노드와 모서리를 완전히 캡처하는 다각형 서페이스를 만들어야하기 때문에 매우 복잡한 문제가 있습니다. 삼각형 패턴의 다음 쌍을 고려
모든 변화는 순전히 삼각형 표면하지 않은 둘을 구성하는 모든 정점과 가장자리가해야 캡처 한 표면을. 그래서, 더 쉬운 경우를 가정 해 봅시다. 하나의 삼각 측량에서 다른 삼각형 분할로 결과를 매핑하려면 값이 더 넓게는 basis functions이라고하는 삼각형을 따라 변하는 방법을 정의하는 함수를 공식화하면됩니다. 삼각형의 노드 (즉, 정점) 사이의 값은 삼각형의 표면을 따라 선형 적으로 변하는 것으로 종종 가정된다. 원하는 경우 다르게 수행 할 수 있습니다. 새 기본 기능을 정의하기 만하면됩니다. 선형 함수를 사용하면 2D에서 방정식이 매우 간단 해집니다. 다른 삼각형의 정점 중 어느 삼각형이 안에 있는지 배열 trimap
을 만드는다고 가정 해 봅시다. This can be accomplished using the info here. 다음에, 우리는 (X1, Y1), (X2, Y2) 및 (X3, Y3) 현재 삼각형의 꼭지점의 좌표를 설정 한 후 연산 수행
for cnt1=1,npoints
x1=x(tri1(trimap(cnt1),1));
x2=x(tri1(trimap(cnt1),2));
x3=x(tri1(trimap(cnt1),3));
y1=y(tri1(trimap(cnt1),1));
y2=y(tri1(trimap(cnt1),2));
y3=y(tri1(trimap(cnt1),3));
delta=x2*y3+x1*y2+x3*y1-x2*y1-x1*y3-x3*y2;
delta1=(x2*y3-x3*y2+xstat(cnt1)*(y2-y3)+ystat(cnt1)*(x3-x2));
delta2=(x3*y1-x1*y3+xstat(cnt1)*(y3-y1)+ystat(cnt1)*(x1-x3));
delta3=(x1*y2-x2*y1+xstat(cnt1)*(y1-y2)+ystat(cnt1)*(x2-x1));
weights(cnt1,1)=delta1/delta;
weights(cnt1,2)=delta2/delta;
weights(cnt1,3)=delta3/delta;
z1=z(tri1(trimap(cnt1),1));
z2=z(tri1(trimap(cnt1),2));
z3=z(tri1(trimap(cnt1),3));
valinterp(cnt1)=sum(weights(cnt1,:).*[z1,z2,z3]);
end
valinterp
는 보간을 각 포인트의 값. Here 및 here은이 모든 것의 배후에 수학을 설명하는 멋진 슬라이드입니다. 이 코드는 테스트하지 않았습니다. 삼각형 분할 외부의 값에 할당하려면 무언가를 수행해야합니다. 아마도 null 값이거나 역 거리 가중 값입니다.
출처
2016-12-07 18:51:15
TTT
먼저 차이점 출력 방법을 정의해야합니다. 예를 들어 한 서페이스를 다른 서페이스로 매핑 한 다음 다른 작업을 수행 하시겠습니까? 아니면 다각형의 완전한 해상도를 유지하는 폴리곤 서페이스를 원하십니까? 또는 다른 것? – TTT
답변 해 주셔서 감사합니다. 오, 그래. 너는 무엇을 제안 하겠는가? 나는 가능한 한 두 가지 방법을 배우고 싶습니다. 그래서 우리는이 스레드에서 하나의 돌로 두 개의 새를 죽일 수 있습니다 :) – MatlabNewb
새로운 폴리곤 서페이스를 만드는 것은 간단한 작업이 아닙니다. 하지만 어떻게하는지에 상관없이 삼각형 요소에 따라 값이 어떻게 다른지를 함수 적으로 정의해야합니다. 나는'trisurf' 함수가 선형 변화라고 가정합니다. 그런 다음 삼각형의 주어진 점에서 값을 계산하여 두 삼각 분할 사이를 보간 할 수 있습니다. – TTT