MATLAB中如何在逻辑方阵内生成二维三角形衍射光阑?
如何在逻辑方阵中创建三角形光阑
核心思路是:给逻辑方阵的每个位置(i,j)(行索引i,列索引j)设定规则——判断该位置是否属于三角形区域,是则设为1(通光),否则设为0(遮挡)。以下是几种常见三角形光阑的实现方案(以Python+NumPy为例,也可以用纯循环实现):
1. 顶点在上的等腰三角形(底边在方阵中部)
三角形三个顶点为(0, mid)、(mid, 0)、(mid, size-1),其中mid是方阵边长的中点索引(假设边长为奇数)。
import numpy as np def create_top_isosceles_triangle(size): # 初始化全0逻辑方阵 grid = np.zeros((size, size), dtype=int) mid = (size - 1) // 2 # 遍历三角形覆盖的行(从顶行到中间行) for i in range(mid + 1): # 计算当前行的通光区域左右边界 left_bound = mid - i right_bound = mid + i grid[i, left_bound:right_bound+1] = 1 return grid # 测试5×5的三角形 triangle = create_top_isosceles_triangle(5) print(triangle)
输出结果:
[[0 0 1 0 0] [0 1 1 1 0] [1 1 1 1 1] [0 0 0 0 0] [0 0 0 0 0]]
2. 底边在上的等腰三角形(顶点在方阵底部)
三个顶点为(0, 0)、(0, size-1)、(size-1, mid),覆盖方阵下半部分:
def create_bottom_isosceles_triangle(size): grid = np.zeros((size, size), dtype=int) mid = (size - 1) // 2 # 遍历从中间行到底行 for i in range(mid, size): offset = i - mid left_bound = mid - offset right_bound = mid + offset grid[i, left_bound:right_bound+1] = 1 return grid # 测试5×5的三角形 triangle = create_bottom_isosceles_triangle(5) print(triangle)
输出结果:
[[0 0 0 0 0] [0 0 0 0 0] [1 1 1 1 1] [0 1 1 1 0] [0 0 1 0 0]]
3. 直角三角形(顶点在左上角,直角边沿行列)
规则:对于位置(i,j),当j <= i时设为1,覆盖方阵左下三角区域:
def create_right_angle_triangle(size): grid = np.zeros((size, size), dtype=int) for i in range(size): grid[i, :i+1] = 1 # 每行前i+1个位置设为1 return grid # 测试5×5的直角三角形 triangle = create_right_angle_triangle(5) print(triangle)
输出结果:
[[1 0 0 0 0] [1 1 0 0 0] [1 1 1 0 0] [1 1 1 1 0] [1 1 1 1 1]]
自定义任意三角形
如果需要非对称或特定顶点的三角形,可以通过直线方程判断位置是否在三角形内:
- 确定三角形三个顶点的坐标
(x1,y1)、(x2,y2)、(x3,y3) - 写出三条边的直线方程,判断点
(i,j)是否在三条边围成的区域内 - 遍历方阵所有位置,符合条件则设为1
内容的提问来源于stack exchange,提问作者requiemman
相关产品推荐
相关产品推荐

