2016-12-07 8 views
0

У меня есть поверхность по коду ниже и другая поверхность, созданная тем же кодом. Я хочу видеть разницу в высоте на другой фигуре. Как я могу это сделать? Уже работает с Minus-operator, но это не сработает.Вычитайте поверхности друг друга

Кроме того, матрицы не имеют одинакового размера!

Цените свою помощь!

x1 = Cx1; 
y1 = Cy1; 
z1 = Cz1; 
tri1 = delaunay(x1,y1); 


fig1 = figure%('units','normalized','outerposition',[0 0 1 1]); 
trisurf(tri1,x2,y2,z2) 
xlabel('x [mm] ','FontSize',30) 
ylabel('y [mm] ','FontSize',30) 
zlabel('z [mm] ','FontSize',30) 
+0

Сначала вам нужно определить, как вы хотите, чтобы разность была выведена. Например, вы хотите сопоставить одну поверхность с другой, а затем сделать разницу? Или вы хотите, чтобы полигональная поверхность поддерживала полное разрешение обоих? Или что-то другое? – TTT

+0

Благодарим вас за ответ. Ох, ну ладно. Что ты предлагаешь? Мне хотелось бы узнать оба пути, если это возможно. Поэтому мы можем убить двух зайцев одним выстрелом в этой теме :) – MatlabNewb

+0

Создание новой многоугольной поверхности - непростая задача. Но независимо от того, как вы это делаете, вам необходимо определить функционально, как значения изменяются в разных треугольных элементах. Я считаю, что функция 'trisurf' предполагает линейную вариацию. Затем вы можете вычислять значения в любой заданной точке треугольника и тем самым интерполировать между двумя триангуляциями. – TTT

ответ

0

Самый простой способ решить эту проблему - интерполировать из одной сетки на другую. Такой подход хорошо работает, когда он более разрешен, чем другой, или когда вы не так же озабочены результатами на отдельных узлах, а скорее общим шаблоном между элементами. Если это не так, то у вас есть очень сложная проблема, потому что вам нужно создать многоугольную поверхность, которая полностью захватывает все узлы и края обеих триангуляций. Рассмотрим следующую пару треугольных моделей:

enter image description here

поверхность, которая захватила все изменения должны были бы иметь все вершины и ребра, которые составляют как из них, которая не является чисто треугольной поверхности. Итак, давайте вместо этого рассмотрим более простой случай. Чтобы отображать результаты от одной триангуляции к другой, вам просто нужно сформулировать функции, которые определяют, как значения изменяются вдоль треугольников, которые более широко называются basis functions. Часто предполагается, что значения между узлами (т. Е. Вершинами) треугольников линейно изменяются вдоль поверхностей треугольников. Вы можете сделать это по-другому, если хотите, просто нужно определить новые базовые функции. Если мы идем для линейных функций, то уравнения в 2D довольно просты. Предположим, вы создали массив trimap, у которого треугольник каждой из вершин другой триангуляции находится внутри. This can be accomplished using the info here. Затем мы устанавливаем координаты вершин текущего треугольника (x1, y1), (x2, y2) и (х3, у3), а затем сделать математику:

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 - некоторые приятные слайды, объясняющие математику за всем этим. Обратите внимание: я не тестировал ни один из этих кодов. Также обратите внимание, что вам нужно будет сделать что-то, чтобы назначить значения за пределами триангуляции. Возможно, нулевое значение или взвешенное значение обратного расстояния.