You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Hadamard矩阵模式绘制8、16、32阶圆的技术实现请求

基于Hadamard矩阵的圆阵列绘制方案

我帮你把现有的N×N圆阵列代码修改成支持8/16/32阶Hadamard矩阵模式的版本,直接看代码和解释就行:

完整代码实现

% 绘制基于Hadamard矩阵模式的圆阵列
clc; clear; close all;

% -------------------------- 参数配置 --------------------------
n_circles = 8;       % Hadamard矩阵阶数(可选8/16/32,均为2的幂)
R = 40;              % 基础圆的半径
Len = 1024;          % 画布尺寸(1024×1024)
show_negative = false; % 是否显示Hadamard矩阵中-1对应的圆(false则只显示+1的位置)
% -------------------------------------------------------------

% 生成对应阶数的Hadamard矩阵
H = hadamard(n_circles);
if show_negative
    H = -H; % 反转显示逻辑,把-1的位置改成显示圆
end

% 创建基础圆的掩码(标记圆内的点)
M0 = zeros(2*R + 1);
[x, y] = meshgrid(-R:R, -R:R);
M0(x.^2 + y.^2 <= R^2) = 1; % 标记圆内的点为1

% 初始化画布掩码
M = zeros(Len);

% 计算每个圆的中心间隔,保证阵列居中
spacing = Len / (n_circles + 1);
centers = spacing : spacing : n_circles*spacing;

% 遍历Hadamard矩阵,根据元素值绘制对应位置的圆
for i = 1:n_circles
    for j = 1:n_circles
        if H(i,j) == 1
            % 计算当前圆在画布上的坐标范围
            x_start = round(centers(j) - R);
            x_end = round(centers(j) + R);
            y_start = round(centers(i) - R);
            y_end = round(centers(i) + R);
            
            % 确保坐标不超出画布边界
            x_start = max(x_start, 1);
            x_end = min(x_end, Len);
            y_start = max(y_start, 1);
            y_end = min(y_end, Len);
            
            % 截取基础圆掩码的对应区域,放到画布上
            M(y_start:y_end, x_start:x_end) = M(y_start:y_end, x_start:x_end) | ...
                M0(y_start-(centers(i)-R)+1 : y_end-(centers(i)-R)+1, ...
                   x_start-(centers(j)-R)+1 : x_end-(centers(j)-R)+1);
        end
    end
end

% 显示绘制结果
figure('Name', [num2str(n_circles) '阶Hadamard圆阵列']);
imshow(M, []);
colormap(gray);
title([num2str(n_circles) '阶Hadamard矩阵模式圆阵列']);

关键部分解释

  • Hadamard矩阵生成:Matlab内置的hadamard(n)函数可以直接生成2的幂次阶数的Hadamard矩阵,正好匹配你需要的8/16/32阶。
  • 显示逻辑控制:通过show_negative参数可以切换显示模式——默认只显示矩阵中+1对应的圆,设为true则显示-1对应的圆。
  • 居中排列:用spacing = Len/(n_circles+1)计算每个圆的中心位置,让整个阵列在1024×1024的画布上均匀分布且居中。
  • 边界处理:添加了坐标范围的判断,避免圆的边缘超出画布导致索引错误。

使用方法

只需要修改n_circles的值为8、16或32,运行代码就能得到对应阶数的Hadamard矩阵模式圆阵列啦。

内容的提问来源于stack exchange,提问作者Viron Gil A. Estrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:33:29