目的:在笛卡尔坐标系中,已知两个点的位置,绘制过这两点的射线。同时射线的长度可以自定义。
一、函数的参数说明
输入参数:
PointA:射线的起点;
PointB:射线过的另一点;
Length:射线的长度;
theta:射线的旋转变换角度;
AOAError:服从正态分布的测向误差方差值;
color:显示的射线颜色。
输出参数:
AOA:射线的真方位,也即地理正北方位角。
二、函数的Matlab代码
%% 绘制直线:已知2点的坐标,绘制过2点的自定义长度的直线
function [AOA]=DrawLine(PointA,PointB,Length,theta,AOAError,color)
theta=theta+generate_gaussian_noise_with_variance(1, AOAError);
startPoint=PointA;
% 计算向量差
vector = PointB - PointA;
% 归一化向量,方向向量
direction_vector = vector / norm(vector);% direction_vector 现在是表示P1到P2方向的单位向量
AOA=mod(atan2(direction_vector(1),direction_vector(2))*180/pi+360,360)+theta;
% 旋转方向向量
% 旋转矩阵
R = [cos(theta*pi/180), -sin(theta*pi/180);
sin(theta*pi/180), cos(theta*pi/180)];
% 旋转方向向量
v_rotated = R * direction_vector';
% 定义一个足够大的长度来表示无限长直线
endPoint = PointA + Length * v_rotated';
% 绘制直线
line([startPoint(1), endPoint(1)], [startPoint(2), endPoint(2)], 'Color', color, 'LineWidth', 2);
hold on
end
2.1 服从正态分布的角度误差
输入参数:
size:噪声的维度;
variance:方差的大小。
输出参数:
gaussian_noise:服从正态分布,方差为variance的随机数。
function gaussian_noise = generate_gaussian_noise_with_variance(size, variance)
% 生成高斯白噪声
% size 是噪声的大小,例如 size(100, 1) 或 size(100, 100)
% variance 是指定的方差
% 生成白噪声
gaussian_noise = randn(size);
% 计算标准差
std_dev = sqrt(variance);
% 缩放噪声到指定的标准差
gaussian_noise = gaussian_noise * std_dev;
end
三、绘制的实例
绘制一条射线,起点(4,3),过点(7,9),长度10,旋转角度0度,测向误差为0,颜色红色。结果如下: