Нахождение области результирующих треугольников триангуляции Делоне
После применения триангуляции Делоне можно ли найти площадь каждого треугольника? Есть ли какая-либо функция в Matlab, чтобы сделать это? Просьба уточнить меня. Заранее спасибо
4 ответа
Я столкнулся с тем же сомнением, но, к счастью, мне удалось его взломать, попробуйте это:
tri = delaunay(x,y);
areas = polyarea(x(tri'),y(tri'),2);
Это даст вам области каждого треугольника.
Дайте мне знать, если обнаружите какие-либо трудности.
PS: tri'
означает транспонирование матрицы.
Это можно сделать с помощью Polyarea - обратите внимание на использование dim
вариант.
tri = delaunay(x,y);
areas = polyarea(tri(x),tri(y),2);
Это решение работает, но не векторизовано.
DT = delaunayTriangulation(X,Y);
NTriangles = size(DT.ConnectivityList,1);
% Triangles' Area Calculation (Try to vectorize)
Areas = zeros(NTriangles,1);
for i = 1:NTriangles
PointIndexes = DT.ConnectivityList(i,:);
Areas(i) = polyarea(DT.Points(PointIndexes,1),DT.Points(PointIndexes,2));
end
Ответы здесь были близки к истине в моем случае, но не совсем, поэтому я присоединяюсь к обсуждению для будущих людей, которым это может понадобиться.
При попытке решения, приведенного здесь, я получил следующую ошибку:
Error using reshape
Number of elements must not change. Use [] as one of the size inputs to
automatically calculate the appropriate size for that dimension.
Error in polyarea (line 46)
area = reshape(abs(sum( (x([2:siz(1) 1],:) - x(:,:)).* ...
Проблема заключалась в том, что
pt = tri.Points;
conn = tri.ConnectivityList;
xmat = reshape(pt(conn,1), [], 2);
ymat = reshape(pt(conn,2), [], 2);
Avec = polyarea(xmat, ymat, 2);
И это решило мою проблему, оставаясь при этом векторизованной операцией.