小编Ail*_*rus的帖子

如何使MATLAB绘图交互?

我正在尝试创建一个简单的界面来绘制二次拉格朗日多项式.为此,您只需要3个点(每个点都有自己的x,y,z坐标),然后使用二次拉格朗日多项式进行插值.

制作静态版本很容易,甚至可以在绘制曲线之前让用户输入3个点.但是,用户也应该可以将绘图窗口中的现有点拖动到另一个位置,然后使用此点的新位置自动重新绘制曲线!

在此输入图像描述

简而言之,用户应该能够将这些黑点拖到另一个位置.之后(或拖动时),应更新曲线.

function Interact()

% Interactive stuff here

figure();
hold on;
axis([0 7 0 5])

DrawLagrange([1,1; 3,4; 6,2])

function DrawLagrange(P)

plot(P(:,1), P(:,2), 'ko--', 'MarkerSize', 10, 'MarkerFaceColor', 'k')

t = 0:.1:2;
Lagrange = [.5*t.^2 - 1.5*t + 1; -t.^2 + 2*t; .5*t.^2 - .5*t];

CurveX = P(1,1)*Lagrange(1,:) + P(2,1)*Lagrange(2,:) + P(3,1)*Lagrange(3,:);
CurveY = P(1,2)*Lagrange(1,:) + P(2,2)*Lagrange(2,:) + P(3,2)*Lagrange(3,:);

plot(CurveX, CurveY);
Run Code Online (Sandbox Code Playgroud)

我想我要么使用WindowButtonDownFcn,WindowButtonUpFcnWindowButtonMotionFcn函数,要么使用Image Processing Toolbox中的ImPoint.但是怎么样?

[编辑]它也应该在3D中工作,因为我想概括这个概念来张紧产品表面.

matlab

15
推荐指数
3
解决办法
2万
查看次数

从Matlab启动应用程序

我正在寻找一种从Matlab内部启动应用程序的方法.问题是,我的Matlab脚本将一些结果保存到文件中,然后应该在关联的应用程序中打开(在本例中为Blender).

我熟悉像这样的命令

system('program_name')
Run Code Online (Sandbox Code Playgroud)

要么

!program_name
Run Code Online (Sandbox Code Playgroud)

和其他一些方法,但问题是,应用程序是从Matlab PATH开始的,所以它在Matlab目录中查找它需要的各种库.例如:

>> !blender
blender: /usr/local/MATLAB/R2011a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by blender)
Run Code Online (Sandbox Code Playgroud)

有没有办法启动一个使用全局(系统)PATH的应用程序?

刚才我发现我发现了一个调整,即在Matlab中启动一个终端,带有一些参数(Blender filename.blend).

system('terminal -x blender /home/pieter/Red.blend')
Run Code Online (Sandbox Code Playgroud)

这确实工作了几次,但是现在我执行这个命令20次左右后出现错误......

>> system('terminal -x blender /home/pieter/Red.blend')
(terminal:10982): GLib-CRITICAL **: PCRE library is compiled without UTF8 support
(terminal:10982): Terminal-CRITICAL **: Failed to parse regular expression pattern 0: PCRE library is compiled without UTF8 support
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我正在使用Arch Linx.


编辑:

好吧,我只是想到了一个相当肮脏的解决方案.Matlab使用环境变量

LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

对于必要库的路径:

getenv('LD_LIBRARY_PATH')
/usr/local/MATLAB/R2011a/sys/os/glnx86:/usr/local/MATLAB/R2011a/bin/glnx86:/usr/local/MATLAB/R2011a/extern/lib/glnx86:/usr/local/MATLAB/R2011a/runtime/glnx86:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386/native_threads:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386/client:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386
Run Code Online (Sandbox Code Playgroud)

所以我可以将这些信息保存到变量(例如MatlabPath):

MatlabPath = getenv('LD_LIBRARY_PATH')
Run Code Online (Sandbox Code Playgroud)

然后在我打电话给blender之前这样做:

setenv('LD_LIBRARY_PATH',getenv('PATH'))
Run Code Online (Sandbox Code Playgroud)

这使得Matlab使用我的系统库.然后在程序启动后,将旧值重新分配给LD_LIBRARY_PATH:

setenv('LD_LIBRARY_PATH',MatlabPath)
Run Code Online (Sandbox Code Playgroud)

所以...这是一个解决方案,但如果有人知道解决问题的更简洁方法,请告诉我.

linux matlab

10
推荐指数
1
解决办法
3379
查看次数

使用半边网格实现Catmull-Clark细分时查找双胞胎

注意:描述变得比预期的要长一些.您是否知道使用此网格的此算法的可读实现?请告诉我!


我正在尝试使用Matlab 实现Catmull-Clark细分,因为稍后必须将结果与已经在Matlab中实现的其他一些东西进行比较.首先尝试使用Vertex-Face网格,算法可以工作,但效率不高,因为边缘和面需要相邻信息.因此,我现在使用的是半边网格.另见 Lutz Kettner 设计多面体表面的数据结构(该页面上的PDF链接).

我的问题在于找到Twin HalfEdges,我只是不确定如何做到这一点.下面我将描述我对实现的看法,试图保持简洁.


半边网格(使用Vertices/HalfEdges/Faces的索引):

Vertex (x,y,z,Outgoing_HalfEdge)
HalfEdge (HeadVertex (or TailVertex, which one should I use), Next, Face, Twin).
Face (HalfEdge)
Run Code Online (Sandbox Code Playgroud)

为了保持现在的简单,假设每个面都是四边形.实际网格是Vertices,HalfEdges和Faces的列表.新网格将由NewVertices,NewHalfEdges和NewFaces组成,如下所示(注意:Number _.........的数量):

NumberNewVertices: Number_Faces + Number_HalfEdges/2 + Number_Vertices
NumberNewHalfEdges: 4 * 4 * NumberFaces
NumberNewfaces: 4 * NumberFaces
Run Code Online (Sandbox Code Playgroud)

卡特莫尔 - 克拉克:

Find the FacePoint (centroid) of each Face:
--> Just average the x,y,z values of the vertices, save as a NewVertex. 
Find …
Run Code Online (Sandbox Code Playgroud)

algorithm 3d graphics matlab polygon

6
推荐指数
1
解决办法
1631
查看次数

从闭合三角形网格创建四面体网格

我正在寻找一种算法(或实现)来从封闭(即没有孔)3D 三角形网格创建四面体网格。

\n\n

最好的解决方案是一个开源应用程序,它可以导入网格文件(例如 OBJ、STL 和 VTK)、显示它们并提供四面体化网格的选项。但我也很喜欢命令行工具,或者只是算法的概述。

\n\n

一些背景 \xe2\x80\x94 我正在 Linux 系统上使用 Blender 来设计表面网格。最终我计划在 Python 或 MATLAB 中实现四面体化算法。

\n\n

我在寻找好的网格划分器时已经偶然发现了一些应用程序名称,但到目前为止我还没有任何具体的结果。因此,非常欢迎任何有关相关论文、算法或实现的信息!

\n\n

到目前为止发现的应用程序:

\n\n
    \n
  • 网格实验室
  • \n
  • 泰特根
  • \n
  • 格姆什
  • \n
  • 犀牛
  • \n
\n\n

一些相关术语:

\n\n
    \n
  • 德劳内 (3D)
  • \n
  • 推进前端网格划分
  • \n
\n

mesh volume

5
推荐指数
1
解决办法
3892
查看次数

Julia中并行for循环中的数据管理

我正在尝试使用Julia进行一些统计分析.代码由文件组成script.jl(例如数据的初始化)和algorithm.jl.

模拟的数量很大(至少100,000),因此使用并行处理是有意义的.

下面的代码只是一些伪代码来说明我的问题 -

function script(simulations::Int64)

# initialise input data
...

# initialise other variables for statistical analysis using zeros()
...

require("algorithm.jl")

@parallel for z = 1:simulations
  while true

    choices = algorithm(data);      

    if length(choices) == 0
      break
    else
      # process choices and pick one (which alters the data)
      ...
    end

  end
end

# display results of statistical analysis
...

end
Run Code Online (Sandbox Code Playgroud)

function algorithm(data)

# actual algorithm
...

return choices;

end
Run Code Online (Sandbox Code Playgroud)

例如,我想知道平均有多少选择,最常见的选择是什么,等等.为此,我需要将choices( for循环中)的一些数据保存到统计分析变量(在 …

parallel-processing for-loop julia

5
推荐指数
1
解决办法
318
查看次数