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

2017年认证杯SPSSPRO杯数学建模

A题 安全的后视镜

原题再现:

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

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

  后视镜作为驾驶员的“第三只眼睛”,在倒车、制动等过程中发挥着重要作用。相对于小轿车,大客车底盘较高,车身较长,视野盲区较大,后视镜设计更为复杂。本文的目的在于提供一种大客车后视镜的最优布置方案,以实现综合性能最优化。
  第一,确定后视镜的布置参数。采用两种双曲率曲面作镜面,利用解析几何求出其曲面方程。在设计后视镜时让视野覆盖主要的下视野盲区、设定下方视野约束。此外结合现实和人机工程,将后视镜尺寸及安装位置控制在一定范围内。
  第二,计算视野面积。基于反射原理和数值模拟技术,本文求出后视镜边缘点在测试屏板上的投影,从而得到了视野区域的大致轮廓。采用改进的蒙特卡洛模拟计算出该不规则视野区域的面积。剔除地面以下和左、右眼视野重复计算的部分后,得到驾驶员双眼的有效视野区域。
  第三,计算畸变指数。作关于镜面平行于坐标轴的 21*20 的网格剖分,分别计算平面后视镜与双曲率后视镜上的网格点在屏板上形成的投影的平均距离。定义畸变指数为衡量图像畸变程度的无量纲指标。
  第四,计算空气阻力。根据空气阻力公式,计算后视镜面积对应的空气阻力大小。最后,建立多目标最优化模型。以视野分界比率、曲率半径等为自变量,以视野面积、畸变指数和空气阻力为优化目标,建立多目标最优化数学模型。运用理想点法,找出理想比率取值,基于欧式距离构建评判函数。根据现有的专利和行业标准,设定自变量的合理范围,并采用遗传算法求解该模型,使得评判函数最小化。本模型便于计算,适用范围广,兼顾求解的速度和质量。同时无须对模型进行过多修改,即可有效提升求解精度。
  本文选取三种型号的金龙客车作为参考车型,求解最优化参数设计。结果分析表明,○1 不同车型的最优的后视镜安装位置有很大的差异:对于车型较大、底盘较高的客车,最佳位置在驾驶员位置的上前方;而车型较小、底盘较低的客车则在与驾驶员眼点相对持平的位置。○2 最优的镜面形状需要考虑与车型有关的因素,针对不同车型具体设计。○3 就镜面类型而论,第一类镜面适用于车 1 和车 2,而第二类镜面对车 3 是更好的选择。

问题分析:

  第一,载客汽车驾驶座附近车身的盲区需要特别考虑。载客汽车后视镜常常安装于车身前部或侧部,驾驶员可通过前风挡玻璃和左右汽车玻璃看外视镜,但是由于客车车型与小轿车车型相比,客车底座更高、车身更长,在驾驶时,车头、左右后视镜下方等区域容易形成视觉盲区,形成交通安全隐患。大客车外后视镜往往采用竖直的长方形造型,以增加可观察的地面面积(或下视野面积),大多数的客车还会安装一面小凸面镜来减少盲区,如图所示。在驾驶过程中,驾驶员通过小凸面镜观察车身下方以及一些死角,通过外后视镜观察道路两侧情况。因此相对于小轿车,大客车的外后视镜在设计上尤其要考虑到驾驶座附近车身的盲区问题。
在这里插入图片描述
  第二,采用双曲率曲面作为后视镜的镜面。后视镜如果采用平面镜,图像没有畸变,但由于镜面大小受限,视野相对较小;如果采用凸面镜,可以以较小的镜面获得更宽广的视野范围,但是图像产生畸变,而双曲率镜面可以有效减少平、凸面镜带来的不利影响,因此本文仍然采用双曲率曲面作为后视镜镜面设计的要件。沿用第一阶段的研究结论,我们设计出一种由两个柱面拼接而成的镜面,解决了下视野盲区问题,但是水平视野仍然受到约束。经过第一阶段相关论文启发,我们又设计出一种由柱面与球面拼接而成的镜面。
  第三,结合现实考虑,客车后视镜尺寸以及安装位置应控制在一定范围内。镜面面积越大,视野范围越大,但面积大的镜面也会给车辆增加空气阻力,因此在设计时镜面面积应该控制在一定的范围下。根据人机工程理论,在驾驶过程中驾驶员如果频繁转动头部和眼部,将会增加驾驶员的疲劳程度。出于驾驶员驾驶的舒适度和安全性考虑,后视镜安装位置控制在驾驶员眼点一定的可视区域内。
  第四,最优的后视镜方案与后视镜所要实现的目的有关,比如满足驾驶适宜性、减少空气阻力,与整车风格一致、外形美观等要求,本文考虑视野面积、畸变率和空气阻力作为最优方案指标。
  此外,由于不同的载客汽车具有不同的固有车辆参数,比如车身长度、宽度、长度,司机双眼位置等,这些固有参数将影响最优方案的结果。因此我们选用了三种不同车型的载客汽车,运用建立的模型设计出了各自后视镜的最优方案,并对影响后视镜最优方案的因素进行分析。

模型假设:

  1. 只考虑水平面上的视野区域和失真度,后视镜所用的镜面为柱面、球面镜
  2. 后视镜垂直于水平地面,与车身前进方向夹角与 90°
  3. 镜面光滑,材质均匀,光在镜面没有能量损失,反射率为 100%
  4. 忽略后视镜外壳以及其他配件,只考虑镜面玻璃
  5. 只考虑左侧外后视镜的布置情况

论文缩略图:

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

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

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

function view=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye)
screen_y=11950;
number=length(edge_x);
view=[];
y_1=-r_max+sqrt(-L^2*ratio^2+r_max^2);
z_1=h-L*ratio;%分界点
sin_theta=(L*ratio)/r_max;
cos_theta=sqrt(-L^2*ratio^2+r_max^2)/r_max;
y_min=y_1-r_min*cos_theta;
z_min=z_1+sin_theta*r_min;%小圆圆心
for i=1:numberedge=[edge_x(i),edge_y(i),edge_z(i)];rushe=edge-eye;rushe=rushe/norm(rushe);if edge_z(i)>=z_1faxian=[0,edge_y(i)+r_max,edge_z(i)-h];faxian=faxian/norm(faxian);chushe=rushe-2*dot(rushe,faxian)*faxian;elsefaxian=[0,edge_y(i)-y_min,edge_z(i)-z_min];faxian=faxian/norm(faxian);chushe=rushe-2*dot(rushe,faxian)*faxian;endc=(screen_y-edge_y(i))/chushe(2);
screen_x=chushe(1)*c+edge_x(i);screen_z=chushe(3)*c+edge_z(i);view=[view [screen_x;screen_y;screen_z]];%plot3(view(1,:),view(2,:),view(3,:),'*')%plot(view(1,:),view(3,:),'*')%set(gca,'xlim',[-7000,0],'ylim',[-1500,1500])%title('最优设计参数下的投影点')%legend('投影点','Location','northeast')
end
end
function a=mianji(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye1,eye2)
view1=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye1);
v1=[view1(1,:);view1(3,:)];
vx1=v1(1,:);
vz1=v1(2,:);
view2=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye2);
v2=[view2(1,:);view2(3,:)];
vx2=v2(1,:);
vz2=v2(2,:);
vx=[vx1 vx2];
vz=[vz1 vz2];
vL=max(vz)-min(vz);
vW=max(vx)-min(vx);
count=0;
popx=linspace(min(vx),max(vx),1000);
popz=linspace(min(vz),max(vz),1000);
for i=1:2500rx=randsample(popx,1);rz=randsample(popz,1);if rz<0continue;endvsx=vx1(1:100);vsz=vz1(1:100);mx=abs(vsx-rx);[s1,d1]=min(mx);range1=vsz(d1);vsx=vx1(201:300);vsz=vz1(201:300);mx=abs(vsx-rx);[s1,d1]=min(mx);range2=vsz(d1);if (range1-rz)*(range2-rz)<=0
vsx=vx1(101:200);vsz=vz1(101:200);mz=abs(vsz-rz);[s1,d1]=min(mz);range1=vsx(d1);vsx=vx1(301:400);vsz=vz1(301:400);mz=abs(vsz-rz);[s1,d1]=min(mz);range2=vsx(d1);if (range1-rx)*(range2-rx)<=0count=count+1;elsevsx=vx2(1:100);vsz=vz2(1:100);mx=abs(vsx-rx);[s1,d1]=min(mx);range1=vsz(d1);vsx=vx2(201:300);vsz=vz2(201:300);mx=abs(vsx-rx);[s1,d1]=min(mx);range2=vsz(d1);if (range1-rz)*(range2-rz)<=0vsx=vx2(101:200);vsz=vz2(101:200);mz=abs(vsz-rz);[s1,d1]=min(mz);range1=vsx(d1);vsx=vx2(301:400);vsz=vz2(301:400);mz=abs(vsz-rz);[s1,d1]=min(mz);range2=vsx(d1);if (range1-rx)*(range2-rx)<=0count=count+1;endendendend 
end
a=vL*vW*count/2500/1000/1000;%视野面积
vx=[vx1 vx2];
vz=[vz1 vz2];
%plot(vx,vz,'*')
%hold on
%plot(rx,rz,'*')
%plot(ones(1,100)*min(vx),linspace(min(vz),max(vz)),'k','LineWidth',4);
%plot(ones(1,100)*max(vx),linspace(min(vz),max(vz)),'k','LineWidth',4);
%plot(linspace(min(vx),max(vx)),ones(1,100)*min(vz),'k','LineWidth',4);
%plot(linspace(min(vx),max(vx)),ones(1,100)*max(vz),'k','LineWidth',4);
%hold off
End
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

idea编译打包前端vue项目

网上download了一个前端vue项目 第一次接触前端记录一下编译打包遇到的问题 1、idea前端项目打包一般是依赖 <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0…

GitLab备份与恢复测试(基于Docker)

GitLab环境准备 docker run --name gitlab \ -p 2022:22 -p 2080:80 -p 2443:443 -d \ -v /opt/gitlab/config:/etc/gitlab \ -v /opt/gitlab/gitlab/logs:/var/log/gitlab \ -v /opt/gitlab/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:16.2.1-ce.0备份 1.修改配置文件…

Centos升级gcc版本

步骤1&#xff1a;查看当前服务器gcc版本 gcc –version 步骤2&#xff1a;查看当前gcc安装目录 find / -name gcc cd /usr/bin ll gcc* 因为gcc&#xff0c;g&#xff0c;c都是配套的,查找出 g和c的原版本位置 步骤3&#xff1a;安装下载依赖包 yum install glibc-heade…

yolov8 opencv dnn部署 github代码

源码地址 本人使用的opencv c github代码,代码作者非本人 实现推理源码中作者的yolov8s.onnx 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv4.7.0) c部署 环境…

标量、向量、矩阵和张量的区别?

标量、向量、矩阵和张量是数学和物理学中常用的概念&#xff0c;它们在多维数据表示和处理中扮演着关键角色。下面是这些概念的基本区别&#xff1a; 标量&#xff08;Scalar&#xff09;: -标量是单个数字&#xff0c;用于表示单一的量。 -它没有方向。 -在数学中&#xff0…

竞赛保研 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

Maven《四》-- 基于Idea进行Maven工程构建

目录 &#x1f436;4.1 构建概念和构建过程 &#x1f436;4.2 命令方式项目构建 1. &#x1f959;编译&#xff1a;mvn compile 2. &#x1f959;清理&#xff1a;mvn clean 3. &#x1f959;打包&#xff1a;mvn package 4. &#x1f959;安装&#xff1a;mvn install …

泰迪科技最新大数据法律监督模型解决方案

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力&#xff0c;辅助检察官从纷繁复杂的数据中&#xff0c;开展多维…

java遍历(for和forEach)

1.dade文件 package model;public class dade {private int id;private String name;public dade() {}public dade(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {r…

unity3d在汽车领域的未来发展趋势浅谈

Unity3D在汽车领域的未来发展趋势可以从以下几个方面深入分析&#xff1a; 增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;的融合&#xff1a;随着AR和VR技术的不断发展&#xff0c;未来Unity3D将在汽车领域中实现AR和VR技术的融合。通过这种融合&a…

Java中的内存溢出与内存泄漏深度解析

目录 引言 一. 内存溢出&#xff08;Memory Overflow&#xff09; 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3 使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、…

使用docker以容器方式安装redis

文章目录 获取redis镜像查看本地镜像从官网获取 redis.conf 配置文件创建并启动redis容器 获取redis镜像 docker pull redis #默认获取redis:latest&#xff0c;即最新的镜像 查看本地镜像 docker images 从官网获取 redis.conf 配置文件 创建并进入目录 [rootVM-16-11-ce…

如何快速上手Vue框架

快速上手Vue框架可以遵循以下步骤。Vue是一个渐进式JavaScript框架&#xff0c;因其易学和灵活而受到许多开发者的欢迎。 1. 基础知识 在开始学习Vue之前&#xff0c;确保你具备以下基础知识&#xff1a; HTML、CSS和JavaScript&#xff1a;Vue是一个JavaScript框架&#xf…

C++ Webserver从零开始:基础知识(五)——信号

Linux信号概述 Linux系统中&#xff0c;信号是一种通信的方式&#xff0c;其通常用作用户&#xff0c;系统或进程给目标进程发送的信息。 信号的作用&#xff1a;通知目标进程某个状态的改变或系统异常。 产生的条件&#xff1a; 对于终端程序&#xff1a;可以是用户输入的…

Python中的函数(二)

1 闭包与装饰器 1.1 闭包 闭包&#xff08;Closure&#xff09;是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数作用域中的变量。闭包可以在外部函数执行完毕后&#xff0c;仍然保持对外部函数作用域的引用&#xff0c;从而可以继续访问和操作外部函…

【Java】--网络编程:基于TCP协议的网络通信

【Java】–网络编程&#xff1a;基于TCP协议的网络通信 文章目录 【Java】--网络编程&#xff1a;基于TCP协议的网络通信一、TCP协议1.1 概念1.2 三次握手1.2.1 文字描述1.2.2 画图演示 1.3 四次挥手1.3.1 文字描述1.3.2 画图演示 二、基于TCP的Socket网络编程2.1 概念2.2 服务…

Kafka-服务端-网络层

Reactor模式 Kafka网络层采用的是Reactor模式&#xff0c;是一种基于事件驱动的模式。熟悉Java编程应该了解JavaNIO提供了实现Reactor模式的API。常见的单线程Java NIO的编程模式如图所示。 为了满足高并发的需求&#xff0c;也为了充分利用服务器的资源&#xff0c;服务端需要…

Selenium 自动化截取网页指定区域截图

一. 需求 在本篇博客中&#xff0c;我将分享一段使用Python编写的自动化网页截图代码&#xff0c;该代码基于Selenium和PIL库&#xff0c;可用于截取网页中指定区域的截图。这样的功能对于需要定期监控特定网页内容或进行网页数据采集的任务非常有用。 二. 代码解析 首先&am…

中间件存储设计 - 数组与链表

文章目录 数组ArrayListLinkedListHashMap小结 中间件主要包括如下三方面的基础&#xff1a;数据结构、JUC 和 Netty&#xff0c;接下来&#xff0c;我们先讲数据结构。 数据结构主要解决的是数据的存储方式问题&#xff0c;是程序设计的基座。 按照重要性和复杂程度&#xf…

Python fork方法:创建新进程

除可以进行多线程编程之外&#xff0c;Python 还支持使用多进程来实现并发编程。 Python 的 os 模块提供了一个 fork() 方法&#xff0c;该方法可以 fork 出来一个子进程。简单来说&#xff0c;fork() 方法的作用在于&#xff0c;程序会启动两个进程&#xff08;一个是父进程&…