2017年认证杯SPSSPRO杯数学建模A题(第一阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模

A题 安全的后视镜

原题再现:

  汽车后视镜的视野对行车安全非常重要。一般来说,汽车的后视镜需要有良好的视野范围,以便驾驶员能够全面地了解车后方的道路情况。同时,后视镜也要使图像的畸变尽可能小,以使驾驶员能够准确地判断距离。如果汽车的后视镜使用平面镜,图像没有畸变,对距离的判断十分准确。但是当镜面大小受限时,视野相对较小。如果使用凸面镜,可以以较小的镜面获得更加宽广的视野,但是图像存在畸变,很难准确判断镜中物体与自己的距离。有的镜面是由平面镜和凸面镜拼合在一起组成,意图兼顾两者的优点。但事实上,驾驶员在观察后视镜时,两者很难同时看清。较受欢迎的做法是构造一个变曲率的后视镜,使后视镜可以兼顾两者的优点,也降低了观察和距离判断上的难度。目前市场上有售不同设计的变曲率后视镜。最常见的是一种双曲率后视镜,内侧接近平面镜,外侧则是一个凸面镜,在它们之间进行了平滑的过渡。图 1 是两个例子,为了便于驾驶员对距离进行判断,镜中由虚线或细实线示意了不同曲率的镜面间的分界线。它们的具体设计有所区别,性能也会有所不同。
  第一阶段问题: 对典型的小型家用轿车而言,共有三面后视镜,左右车门的外侧各装一面外后视镜,车内正中还有一面内后视镜。假设两面外后视镜都设计成如图 1 所示的双曲率后视镜,请你建立相应的数学模型,对外后视镜给出优化的设计方案,包括镜面的曲面外形以及分界示意线的位置。并以一种现有的轿车为例 (可自选),给出具体的计算结果,镜面的边缘轮廓可以沿用现有的设计。由于我们只做理论上的研究,所以在设计时暂不需要考虑和遵循相应的国家标准。
在这里插入图片描述

整体求解过程概述(摘要)

  汽车在换道、超车、转弯、掉头、倒车入库行驶时,汽车后视镜使驾驶者可以间接看清汽车后方、侧方和下方位置的环境状况,起到了“第二只眼睛”的作用。当前汽车的外后视镜多选择双曲率后视镜,内侧接近平面镜,外侧则是一个凸面镜,既扩大视野又减小畸变。镜面设计时需要考虑平面镜与凸面镜的分配比例及凸面镜的曲率大小,并保证平面镜与凸面镜的平滑过渡。针对双曲率外后视镜设计的多目标优化问题,本文进行了下列工作:
  一:建立视野及畸变率量化指标。本文采用视野面积表征视野大小,采用畸变率表征镜像失真程度。首先建立了车体坐标系、镜面坐标系,通过设定人眼、外后视镜及测试屏幕在车体系下的位置,利用后视镜曲面光学原理,求出 40X10镜面光点对应测试屏幕光点坐标,通过连接测试屏幕散乱点,计算无重复三角形面积和,考虑车身遮挡及左右眼点的交集面积表示为视野面积;分别计算测试屏幕光点在不同方向、不同眼点的畸变率,再求取其平均值作为表征畸变程度的物理量,建立畸变率模型。
  二:建立并分析多种双曲率镜面模型。在保证平滑过渡的基础上,对内侧镜面与外侧镜面曲面形式,尝试多类组合方式,建立相应镜面模型。通过计算不同镜面模型视野、畸变率的大小,定量分析了视场角及畸变率的影响因素。
  三:利用第二步得出的结论,建立镜面模型。本文选用球面作为内侧镜面的曲面,选用圆环作为外侧镜面的曲面,球面与圆环外表面完全相切,保证平滑过渡。建立多目标采用拟牛顿法作为非线性方程求解算法,结合模拟退火算法优化,得出最佳的球面与圆环面的结合位置及球面与圆环面的曲率,在保证视野畸变率的前提下,视野面积增加了 15.8%。
  此外,使用 CATIA 三维实体软件,对优化出的镜面进行验证。分析视野在路面的投影区域,验证了本文设计的镜面满足法规的要求,并且视场足够大。本文在建模过程也考虑一些其他因素,如驾驶员高度,安全性等因素对镜面设计的影响,但本文所建立的镜面模型为双曲率镜面,没有分析变曲率镜面的设计因素。考虑左右外后视镜没有耦合问题,且建模原理一致,所以本文仅对左后视镜镜面建模并优化分析。

问题分析:

  左后视镜内侧主要用于观察离车身较近的物体的信息(如图 ),驾驶员需通过该区域的图像信息进行距离的准确判断,因此内侧模型主要考虑图像畸变率。左后视镜外侧主要用于观察离车身较远的物体的信息,这部分信息主要是起到辅助观察的左右,对于该部分的图像可以适当放大失真率,以换求更加广泛的视野范围。因此外侧模型主要考虑在人体可接受的图像畸变率范围内(通常定为 7%),通过改变镜面曲率,尽量增加视野范围。

在这里插入图片描述
  由于内外侧选择不同的曲面模型,那么必然存在曲面模型衔接的问题,为了防止整个镜面的曲率突变,应该保证内外侧模型在结合处进行平滑过渡。针对上述镜面内外侧模型的功能不同,建模时需要对注意以下几点:
  1. 内外侧模型分别选取合适的曲面模型进行建模。
  2. 基于对题意的理解,保证曲面之间进行平滑过渡,本文理解为内外侧模型应该保证相切。
  3. 内外侧模型曲面类型确定之后,应针对该问题的特点,选择合适的优化算法进行模型参数优化。
  4. 对优化的结果进行仿真验证。

模型假设:

  本次建模假设如下:
  1. 人眼高度及左右位置固定,两眼距离固定,且两眼连线垂直于车身纵向平面。
  2. 后视镜的外壳与车身固定,
  3. 不考虑右侧后视镜、车内后视镜对左侧后视镜视野的影响。
  4. 不考虑反射率的问题,认为反射率为 100%。
  5. 镜面垂直垂直于水平地面。
  6. 镜面与镜壳夹角固定,本文设置镜面与镜壳平行。
  7. 后视镜外壳不影响人眼的视线。
  8. 假设镜面边缘为矩形。其他未尽假设在建模时说明。

论文缩略图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

clc;close all;clear;
%眼点尺寸计算
Peye_v=[-0.7 -0.4 0.25]';%眼点在车体坐标系中的位置
%x 为车头方向,y 为车左侧为正,z 为上为正
leyes=0.065;%双眼点之间的距离
Peyel_v=Peye_v+[0 0.0325 0]';
Peyer_v=Peye_v+[0 -0.0325 0]';
%镜面局部坐标系:垂直镜面向前为 x,沿镜面向后为 y 正
l_mr=0.2;
h_mr=0.1;
%镜子相对车体的安装 角度
afa=60*pi/180;
%镜子离车体的距离 ,延长线方向
dmr=0.08;
%车体坐标原点在镜面坐标系下的坐标
Pmv=[0 -l_mr/2-dmr -h_mr/2]';
%左镜面坐标系原点在车体系下的坐标
Pvm=[-(l_mr/2+dmr)*cos(afa) (l_mr/2+dmr)*sin(afa) h_mr/2]';
%右镜面坐标系原点在车体系下的坐标
Pvm_R=[-(l_mr/2+dmr)*cos(afa) -(l_mr/2+dmr)*sin(afa)-1.8 h_mr/2]';
%从右镜面坐标系到车体坐标系的转换矩阵
AvmR=[cos(pi/2-afa) cos(afa) 0;cos(pi/2+afa) cos(pi/2-afa) 0;0 0 1];
%从车体坐标系到镜面坐标系的转换矩阵
Amv=[cos(pi/2-afa) cos(afa) 0;cos(pi-afa) cos(pi/2-afa) 0;0 0 1];
%从镜面坐标系到车体坐标系的转换矩阵
Avm=Amv';
%车体轮廓,车体坐标下
Pcar_v=[
1 -2.8 -2.8 1 1;
0 0 -1.8 -1.8 0;
0 0 0 0 0
];
%左侧车尾点
Pcarbk=Pcar_v(:,2);
%车体轮廓在镜面坐标下
Pcar_m=Amv*Pcar_v;
Pcar_m(1,:)=Pcar_m(1,:)+Pmv(1);
Pcar_m(2,:)=Pcar_m(2,:)+Pmv(2);
Pcar_m(3,:)=Pcar_m(3,:)+Pmv(3);
%后视镜轮廓坐标 镜面坐标下 %左上 左下 右下 右上 左上
Pmr_m=[0 0 0 0 0;l_mr/2 l_mr/2 -l_mr/2 -l_mr/2 l_mr/2;h_mr/2 -h_mr/2 -h_mr/2 h_mr/2 h_mr/2];
%右后视镜轮廓坐标 镜面坐标下 %左上 左下 右下 右上 左上
Pmr_m_R=[0 0 0 0 0;l_mr/2 l_mr/2 -l_mr/2 -l_mr/2 l_mr/2;h_mr/2 -h_mr/2 -h_mr/2 h_mr/2 h_mr/2];
%左后视镜在车体系下坐标 左上 左下 右下 右上 左上
Pmr_v=[-(dmr+l_mr)*cos(afa) (l_mr+dmr)*sin(afa) h_mr;-(dmr+l_mr)*cos(afa) (l_mr+dmr)*sin(afa) 0;-dmr*cos(afa) dmr*sin(afa) 0;-dmr*cos(afa) dmr*sin(afa) h_mr;-(dmr+l_mr)*cos(afa) (l_mr+dmr)*sin(afa) h_mr]';
%使用方向余弦矩阵处理
Pmr_v=Avm*Pmr_m;
Pmr_v(1,:)=Pmr_v(1,:)+Pvm(1);
Pmr_v(2,:)=Pmr_v(2,:)+Pvm(2);
Pmr_v(3,:)=Pmr_v(3,:)+Pvm(3);
%右后视镜轮廓在车体坐标系下
Pmr_R_v=AvmR*Pmr_m_R;
Pmr_R_v(1,:)=Pmr_R_v(1,:)+Pvm_R(1);
Pmr_R_v(2,:)=Pmr_R_v(2,:)+Pvm_R(2);
Pmr_R_v(3,:)=Pmr_R_v(3,:)+Pvm_R(3);
%投影屏幕轮廓 车体坐标下
%投影屏幕大小
ls=12;
hs=4;%
diss=10;
Ps=[-diss ls/2 0;-diss ls/2 -hs;
-diss -ls/2 -hs-diss -ls/2 0;-diss ls/2 0]';
%转换到镜面坐标下
Psm=Amv*Ps;
Psm(1,:)=Psm(1,:)+Pmv(1,1);
Psm(2,:)=Psm(2,:)+Pmv(2,1);
Psm(3,:)=Psm(3,:)+Pmv(3,1);
%屏幕平面 方程 x=-10
%眼点在镜面坐标系下的坐标值
Peye_m=Amv*Peye_v+Pmv;
Peyel_m=Amv*Peyel_v+Pmv;
Peyer_m=Amv*Peyer_v+Pmv;
%后视镜上的离散点坐标
num_l=40;
num_h=10;
PmEdge=zeros(3,num_l*num_h);
R=1.5;%0.4;%半径
%球心坐标
r=0.7;%环半径
Psphere=[R 0 0]';
%求法向量矩阵
Fm=zeros(3,num_l*num_h);
%反射点到车尾的向量
b2bk=zeros(3,num_l*num_h);
for i=1:num_lfor j=1:num_hPmEdge(2,j+(i-1)*num_h) =-l_mr/2+ l_mr/(num_l-1)*(i-1);PmEdge(3,j+(i-1)*num_h) =h_mr/2- h_mr/(num_h-1)*(j-1);if PmEdge(2,j+(i-1)*num_h)<=0%spherePmEdge(1,j+(i-1)*num_h) 
=-sqrt(R^2-PmEdge(2,j+(i-1)*num_h)^2-PmEdge(3,j+(i-1)*num_h)^2)+R;Fm(:,j+(i-1)*num_h)=[PmEdge(1,j+(i-1)*num_h)-Psphere(1) ...PmEdge(2,j+(i-1)*num_h)-Psphere(2) 
PmEdge(3,j+(i-1)*num_h)-Psphere(3)]/R; elsePmEdge(1,j+(i-1)*num_h)=R-sqrt((R-r+sqrt(r^2-PmEdge(2,j+(i-1)*num_h)^2 ))^2-PmEdge(3,j
+(i-1)*num_h)^2);
Fm(:,j+(i-1)*num_h)=[2*(sqrt((PmEdge(1,j+(i-1)*num_h)-R)^2+PmEdge(3,j+(i-1)*num_h)^2)-R+r)*((PmEdge(1,j+(i-1
)*num_h)-R)^2+PmEdge(3,j+(i-1)*num_h)^2)^-0.5*(PmEdge(1,j+(i-1)*num_h)-R); 2*PmEdge(2,j+(i-1)*num_h)2*(sqrt((PmEdge(1,j+(i-1)*num_h)-R)^2+PmEdge(3,j+(i-1)*num_h)^2)-R+r)*((PmEdge(1,j+(i-1
)*num_h)-R)^2+PmEdge(3,j+(i-1)*num_h)^2)^-0.5*PmEdge(3,j+(i-1)*num_h)];Fm(:,j+(i-1)*num_h)=Fm(:,j+(i-1)*num_h)/sqrt(Fm(1,j+(i-1)*num_h)^2+Fm(2,j+(i-1)*num_h)
^2+Fm(3,j+(i-1)*num_h)^2);endend 
end
%画镜面在镜面坐标下的形状
subplot(3,4,4);hold on;grid on;
%镜面轮廓
plot3(Pmr_m(1,:),Pmr_m(2,:),Pmr_m(3,:));
for i=1:num_l*num_hplot3(PmEdge(1,i),PmEdge(2,i),PmEdge(3,i),'*g')
end
view([-60, 30])
title('镜面形状')
set(gca,'DataAspectRatio',[0.3 1 1])
%入射光线方向向量 左眼
[m n]=size(PmEdge);
FmRL=zeros(m,n);
FmRR=zeros(m,n);
for i=1:nFmRL(:,i)=PmEdge(:,i)-Peyel_m;%入射光线方向向量 左眼FmRR(:,i)=PmEdge(:,i)-Peyer_m;%入射光线方向向量 右眼
end
%入射光线单位方向向量
for i=1:n
d=sqrt(FmRL(1,i)^2+FmRL(2,i)^2+FmRL(3,i)^2);
FmRL(:,i)=FmRL(:,i)/d;
d=sqrt(FmRR(1,i)^2+FmRR(2,i)^2+FmRR(3,i)^2);
FmRR(:,i)=FmRR(:,i)/d;
end
%反射向量
b_left=zeros(m,n);
b_right=zeros(m,n);
for i=1:n
b_left(:,i)=FmRL(:,i)-2*(Fm(:,i)'*FmRL(:,i))*Fm(:,i);
b_right(:,i)=FmRR(:,i)-2*(Fm(:,i)'*FmRR(:,i))*Fm(:,i);
end
%转到车体系
b_v_left=Avm*b_left;
b_v_right=Avm*b_right;
%反射点到车尾的向量
b2bk=zeros(3,num_l*num_h);
%车体系下镜边缘点的位置
P_v_mEedge=zeros(m,n);
for i=1:nP_v_mEedge(:,i)=Avm*(PmEdge(:,i)+Pvm);b2bk(:,i)=Pcarbk- P_v_mEedge(:,i);%镜上点到车尾的向量b2bk(:,i)=b2bk(:,i)/sqrt(b2bk(1,i)^2+b2bk(2,i)^2+b2bk(3,i)^2); 
end
%屏幕边缘坐标转到车体系下
% PmEdgeV=Avm*P_v_mEedge;
%求车体系下的交点 %屏幕交点在车体系下的
Psv_L=-diss*ones(m,n);
Psv_R=-diss*ones(m,n);
for i=1:nKK=(-diss-P_v_mEedge(1,i))/b_left(1,i);
Psv_L(2,i)=KK*b_left(2,i)+P_v_mEedge(2,i);
Psv_L(3,i)=KK*b_left(3,i)+P_v_mEedge(3,i);KK=(-diss-P_v_mEedge(1,i))/b_right(1,i);Psv_R(2,i)=KK*b_right(2,i)+P_v_mEedge(2,i);Psv_R(3,i)=KK*b_right(3,i)+P_v_mEedge(3,i);
end
Psm_L=Amv*Psv_L;
Psm_R=Amv*Psv_R;
%车体系下绘图
subplot(1,4,[1 3]);hold on;grid on;
title('屏幕投影')
%eye 
plot3(Peye_v(1,1),Peye_v(2,1),Peye_v(3,1),'*')
plot3(Peyel_v(1,1),Peyel_v(2,1),Peyel_v(3,1),'*')
plot3(Peyer_v(1,1),Peyer_v(2,1),Peyer_v(3,1),'*')
%car
plot3(Pcar_v(1,:),Pcar_v(2,:),Pcar_v(3,:));
%左镜面轮廓
plot3(Pmr_v(1,:),Pmr_v(2,:),Pmr_v(3,:));
%右镜面轮廓
plot3(Pmr_R_v(1,:),Pmr_R_v(2,:),Pmr_R_v(3,:));
%幕轮廓
plot3(Ps(1,:),Ps(2,:),Ps(3,:));
set(gca,'DataAspectRatio',[1 1 1])
xlim([-10 2]);
view([100 25])
for i=1:nif b2bk(2,i)<=b_left(2,i)plot3(Psv_L(1,i),Psv_L(2,i),Psv_L(3,i),'r*');elseplot3(Psv_L(1,i),Psv_L(2,i),Psv_L(3,i),'g.'); endif b2bk(2,i)<=b_right(2,i)plot3(Psv_R(1,i),Psv_R(2,i),Psv_R(3,i),'bo');elseplot3(Psv_R(1,i),Psv_R(2,i),Psv_R(3,i),'c.');end
end
dt = DelaunayTri(Psv_L(2,:)',Psv_L(3,:)');
k = convexHull(dt);
abs(trapz(dt.X(k,1),dt.X(k,2)))
dt = DelaunayTri(Psv_R(2,:)',Psv_R(3,:)');
k = convexHull(dt);
abs(trapz(dt.X(k,1),dt.X(k,2)))
distortioncalc;
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415379.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus框架入门级理解

MybatisPlus 快速入门入门案例常见注解常用配置 核心功能条件构造器自定义SQLService接口 快速入门 入门案例 使用MybatisPlus的基本步骤&#xff1a; 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供了starter&#xff0c;其中集成了Mybatis和MybatisPlus的所有功能&#…

第一部分 概述

目录 一、计算机网络在信息时代的作用 大众熟悉的三大类网络有 Internet 互连网与互联网的区别 可以从两种不同的方面来认识互联网&#xff1a; 互联网在生活中的地位 互联网 互联网负面影响 二、互联网的概述 网络的网络 基本概念 互连网基础结构发展的三个阶段 万维网www(…

java基础:求数组的最值

方法一&#xff1a;顺序查找 先假设数组第一个元素为最值&#xff0c;然后和数组里的数按顺序进行比较得出最值&#xff0c;所以叫顺序查找。 代码如下 package idea;public class arr_int {public static void main(String[] args) { // 初始化一个数组int[] arr {12…

山海鲸可视化软件:引领航空业数字化转型的智慧机场解决方案

作为山海鲸可视化软件的开发者&#xff0c;我们深知在当今数字化时代&#xff0c;数据可视化的重要性。特别是在航空业&#xff0c;数据可视化不仅可以提高运营效率&#xff0c;还能为决策者提供更准确、实时的信息。为此&#xff0c;我们推出了一款专为智慧机场设计的可视化解…

计算机毕业设计 基于SSM的历史/博物馆藏系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

go 语言(九)----struct

定义一个结构体 type Book struct {title stringauth string }结构体使用 package mainimport "fmt"//定义一个结构体 type Book struct {title stringauth string }func main() {var book1 Bookbook1.title "Golang"book1.auth "zhang3"fmt…

4人遇难,北京突发火情 富维烟火识别防止悲剧再次发生

在北京一处居民区&#xff0c;一场突如其来的火灾夺走了四条宝贵的生命。火情迅速蔓延&#xff0c;烟雾弥漫&#xff0c;居民们猝不及防。这一悲剧再次提醒我们&#xff0c;火灾预防和早期识别的重要性不容忽视。 在这样的背景下&#xff0c;北京富维图像公司开发的FIS智能图像…

TQ7.2WS-N3,Tide Quencher 7.2WS-叠氮,主要用于标记含有羰基的生物分子

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Tide Quencher 7.2WS azide&#xff0c;TQ7.2WS azide&#xff0c;Tide Quencher 7.2WS N3 &#xff0c;TQ7.2WS N3&#xff0c;Tide Quencher 7.2WS 叠氮&#xff0c;TQ7.2WS 叠氮 一、基本信息 产品简介&#xff…

【我与Java的成长记】之多态,重载与重写详解

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 Java笔记传送门 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、多态的概…

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一…

Puppeteer让你网页操作更简单(2)抓取数据

Puppeteer让你网页操作更简单(1)屏幕截图】 示例2 —— 让我们抓取一些数据 现在您已经了解了Headless Chrome和Puppeteer的工作原理基础知识,让我们看一个更复杂的示例,其中我们实际上可以抓取一些数据。 首先,请查看此处的Puppeteer API文档。如您所见,有大量不同的方法我…

大模型压缩与优化的技术原理与创新方法

目录 前言1 模型压缩简介2 知识蒸馏3 模型剪枝3.1 结构化剪枝3.2 非结构化剪枝 4 模型量化4.1 浮点表示 vs 定点表示4.2 位数选择与性能影响4.3 量化技术 5 其他模型压缩方法5.1 Weight Sharing: 参数共享5.2 Low-rank Approximation: 低秩分解5.3 Architecture Search: 神经网…