MATLAB -生成用于衍射的2D三角形孔径

cigdeys3  于 6个月前  发布在  Matlab
关注(0)|答案(1)|浏览(89)

我有一个逻辑正方形数组,值为1表示允许光线通过这些点,值为0表示光线被阻挡。
我如何在这个数组中创建一个三角形的光圈形状?我真的被难倒了,我绞尽脑汁也想不出一个解决方案。

8xiog9wr

8xiog9wr1#

把这个逻辑数组看作是一个函数多次求值的结果,输入是xy。然后你的工作就是创建一个函数,它返回三角形内的点true,三角形外的点false
这个函数是什么呢?关于这个问题,请参阅提供的许多答案(不幸的是,不恰当的封闭问题):How to determine if a point is in a 2D triangle?
或者,因为这是MATLAB,所以使用更通用(因此性能较差)的inpolygon。将三角形表示为x坐标和y坐标的列表。
然后,通过在逻辑矩阵上生成x和y的网格来测试所有点,并将所有这些点传递给inpolygon
以下内容未经测试:

N = 256;  % size of logical array
x = linspace(-1, 1, N);  % let's define the coordinate space of your array as -1 to 1
y = linspace(-1, 1, N);
[X,Y] = meshgrid(x,y);

tri_x = [-.75 0 .75];  % strange triangle
tri_y = [.25 .75 .25];

in_triangle = inpolygon(X, Y, tri_x, tri_y);

字符串

相关问题