制作.oct文件进行分配

问题描述 投票:0回答:1

Distmesh是Perrson在matlab中编写的一种流行的三角剖分例程。在某些情况下,Persson使用.mex文件来加快计算速度。我想将此扩展到八度。我已阅读https://enacit1.epfl.ch/octave_doc/octave/octave.html/Getting-Started-with-Oct_002dFiles.html和其他教程,并成功地使这些示例生效。这是distmesh的典型代码:

function d=dpoly(p,pv)

%   Copyright (C) 2004-2012 Per-Olof Persson. See COPYRIGHT.TXT for details.

np=size(p,1);
nvs=size(pv,1)-1;

ds=dsegment(p,pv);
%ds=zeros(np,nvs);
%for iv=1:nvs
%  ds(:,iv)=donesegment(p,pv(iv:iv+1,:));
%end
d=min(ds,[],2);

d=(-1).^(inpolygon(p(:,1),p(:,2),pv(:,1),pv(:,2))).*d;

% MEXED

%function ds=donesegment(p,pv)
%
%e=ones(size(p,1),1);
%
%v=diff(pv,1);
%w=p-e*pv(1,:);
%
%c1=sum(w.*v(e,:),2);
%c2=sum(v(e,:).^2,2);
%
%ds=0*e;
%
%ix=c1<=0;
%ds(ix)=sqrt(sum((p(ix,:)-pv(1*ones(sum(ix),1),:)).^2,2));
%
%ix=c1>=c2;
%ds(ix)=sqrt(sum((p(ix,:)-pv(2*ones(sum(ix),1),:)).^2,2));
%
%ix=c1>0 & c2>c1;
%nix=sum(ix);
%if nix>0
%  Pb=ones(nix,1)*pv(1,:)+c1(ix)./c2(ix)*v;
%  ds(ix)=sqrt(sum((p(ix,:)-Pb).^2,2));
%end

将函数d = donesegment(p,v)(%MEXED行下的所有内容)转换为.oct文件的任务。我既不是c程序员也不是cpp程序员,所以我不知道需要包含哪些标头,或包含它们的语句。

octave triangulation
1个回答
0
投票

John Burkhardt's站点的copy of distmesh已经包含用C ++编写的例程的纯matlab版本。特别是dsegment.m在那里可用。我已经使用该文件在八度中运行了distmesh。这有点慢,但是对于中小型情况是可以接受的。

© www.soinside.com 2019 - 2024. All rights reserved.