octave - 为 distmesh 制作 .oct 文件
问题描述
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 文件的任务。我既不是 ac 也不是 cpp 程序员,所以我不知道需要包含哪些标头,或者包含它们所需的语句。
解决方案
John Burkhardt 的站点有一个distmesh 的副本,其中已经包含用 C++ 编写的例程的纯 matlab 版本。特别是dsegment.m在那里可用。我已经distmesh
使用该文件以八度音阶运行;它有点慢,但对于中小型案例是可以接受的。
推荐阅读
- deno - Deno 棉“必须有类型”
- java - 在java中制作2d游戏时显示相机渲染的帧的最佳方法是什么
- redis - 如何配置 Bulljs 以连接集群的 Elasticcache redis?
- sed - 谁能解释一下shell脚本中的这一行是做什么的?
- sql - 检查 Hive SQL 中的两个条件
- swift - 基于 Swift 服务器计时器的线程在 AWS 上的 Docker 容器重新部署中幸存下来
- python - 在 Python 中生成列表组合 - 使用规则
- asp.net-mvc - 将最小和最大日期范围设置为 DateTime 输入
- python - 如何循环遍历 pandas 数据框为每个变量运行独立的测试?
- typescript - 如何从对象键中生成枚举?