低维度向量的 Householder 反射变换 matlab 图示

1, 算法原理

设 \theta 是一个弧度值,

\mathbf{Q}=\left| \begin{array}{cc} \cos\theta & \,\,\,\,\,\,\sin\theta\\ \sin\theta &-\cos\theta\\ \end{array} \right|

\mathbf{S}=\mathbf{span} \left\{ \left[ \begin{array}{c} \cos(\theta/2)\\ \sin(\theta/2)\\ \end{array} \right] \right \}

则,\mathbf{Q} 是一个 Householder 变换的矩阵, 而 \mathbf{S} 是二维平面中的一条直线。

\overrightarrow{x} = (x_1, x_2) 

是一个平面上的二维向量,简记为 x

计算

y = \mathbf{Q}^T x=\mathbf{Q} x


则,y 是 x 通过有 S 定义的直线作为镜面,反射而达到的像。

为形象期间,现以 \theta = \pi/3 为例,则

\mathbf{Q}_{\pi/3}=\left| \begin{array}{cc} \cos\pi/3 & \,\,\,\,\,\,\sin\pi/3\\ \sin\pi/3 &-\cos\pi/3\\ \end{array} \right|

镜面矢量为:

\mathbf{S}_{\pi/3}=\mathbf{span} \left\{ \left[ \begin{array}{c} \cos(\pi/3/2)\\ \sin(\pi/3/2)\\ \end{array} \right] \right \}=\mathbf{span} \left\{ \left[ \begin{array}{c} \cos(\pi/6)\\ \sin(\pi/6)\\ \end{array} \right] \right \}

现设

x = \left[\begin{array}{c} 1.0\\1.0\\ \end{array} \right ]

于是,

y=Qx=\left[\begin{array}{c} {1.3660}\\ {0.3660}\\ \end{array} \right]

如图:

2. 代码

draw_householder.m

%input x, ta = theta

%x = [-sqrt(2)/2.0, sqrt(2)/2.0]
x = [-1.2, 1.2]
ta = 2.0

S = [cos(ta/2.0), sin(ta/2.0)]
Q = [cos(ta), sin(ta); sin(ta), -cos(ta);]

y = x*Q'


figure;
%1. draw axis
xmin = -2
xmax = 2
ymin = -2
ymax = 2

axisx = xmin:xmax;
axisy = zeros(size(axisx));
plot(axisx, axisy, 'k--', 'LineWidth', 0.7); % Plot x=0 axis
hold on;
plot(axisy, xmin:xmax, 'k--', 'LineWidth', 0.7); % Plot y=0 axis
hold on;

%2. draw surface of mirror
sx = -2*S(1):0.1:2*S(1)
sy = (S(2)/S(1))*sx
plot(sx, sy)
hold on;

%3. draw preimage
plot(x(1), x(2), 'ro')
hold on;

%4. draw image
plot(y(1), y(2), 'bo')

%5. axis label
xlabel("X")
ylabel('Y')
v=[xmin, xmax, ymin, ymax]
axis(v)
%axis on

3, 效果图

下面这张图为

x=(-1.2, 1.2), theta = 2.0 弧度

下图为

x=(0.7, 0.3), theta = 1.0 弧度

下图为

x = [-sqrt(2)/2.0, sqrt(2)/2.0]   , theta = 1.0弧度

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值