如何在MATLAB中绘制ℝ²→ℝ²函数的变换网格图像?
在MATLAB中绘制ℝ²→ℝ²变换的网格并关联原像
完全可以在MATLAB中实现这类变换网格的绘制,同时支持通过标记点、配色等方式关联原像坐标。以下是具体实现方案:
1. 基础实现:生成变换后的网格
核心思路是先生成规则的原网格,再通过自定义变换函数计算每个网格点的新坐标,最后绘制变换后的网格线。
% 1. 生成原网格点 x = linspace(-2, 2, 10); % x轴等分网格点 y = linspace(-2, 2, 10); % y轴等分网格点 [X, Y] = meshgrid(x, y); % 2. 定义ℝ²→ℝ²变换函数(示例为剪切+缩放变换) % 可替换为任意自定义变换,比如极坐标变换、旋转变换等 U = X + 0.6*Y; % 变换后的u坐标 V = 0.4*X + Y; % 变换后的v坐标 % 3. 绘制变换后的网格 figure; hold on; axis equal; axis([-3 3 -3 3]); % 绘制横向网格线(固定原y值的行) for i = 1:length(y) plot(U(i,:), V(i,:), 'k-', 'LineWidth', 1); end % 绘制纵向网格线(固定原x值的列) for j = 1:length(x) plot(U(:,j), V(:,j), 'k-', 'LineWidth', 1); end
2. 关联原像:标记关键点
通过标记原网格的特定点(如顶点、中心),并标注原坐标,直观展示原像与变换后点的对应关系:
% 标记原网格的四个顶点及中心 key_x = [-2, 2, -2, 2, 0]; key_y = [-2, -2, 2, 2, 0]; [key_X, key_Y] = meshgrid(key_x, key_y); key_U = key_X + 0.6*key_Y; key_V = 0.4*key_X + key_Y; % 绘制标记点并添加原坐标标注 scatter(key_U(:), key_V(:), 60, 'r', 'filled', 'MarkerEdgeColor', 'k'); for k = 1:length(key_U(:)) text(key_U(k)+0.15, key_V(k)+0.15, ... sprintf('(%.1f,%.1f)', key_X(k), key_Y(k)), 'FontSize', 9); end
3. 按原像坐标配色
利用原网格的x/y坐标作为颜色映射依据,让变换后的网格/点直接体现原像信息:
方案1:网格线按原坐标配色
figure; hold on; axis equal; axis([-3 3 -3 3]); cmap = jet(length(y)); % 生成与原y值数量匹配的色卡 % 横向网格线按原y值配色 for i = 1:length(y) plot(U(i,:), V(i,:), 'LineWidth', 1.5, 'Color', cmap(i,:)); end % 纵向网格线按原x值配色 for j = 1:length(x) plot(U(:,j), V(:,j), 'LineWidth', 1.5, 'Color', cmap(j,:)); end colorbar; ylabel('原坐标值'); title('按原坐标配色的变换网格');
方案2:变换点按原坐标配色
figure; hold on; axis equal; axis([-3 3 -3 3]); % 按原x坐标为变换点配色 C = reshape(X, [], 1); scatter(U(:), V(:), 30, C, 'filled'); colormap(jet); colorbar; xlabel('变换后u坐标'); ylabel('变换后v坐标'); title('按原x坐标配色的变换点');
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

