自动驾驶感知面试-coding应用题

news2024/12/19 13:17:54

感知面试手撕代码:这个博主总结的很好,尤其是关于叉积的计算

双线性插值

双线性插值公式记忆方法和Python实现

NMS算法

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
struct Box {
    int x1,x2,y1,y2;
    float score;
};

float iou(const Box& b1, const Box& b2) {
    int len = std::min(b1.x2, b2.x2) - std::max(b1.x1, b2.x1);
    int width = std::min(b1.y2, b2.y2) - std::max(b1.y1, b2.y1);
    int inter = std::max(0, len) * std::max(0, width);
    int area = (b1.x2 - b1.x1) * (b1.y2 - b1.y1) + (b2.x2 - b2.x1) * (b2.y2 - b2.y1);

    return float(inter) / area;
}

std::vector<Box> nms(vector<Box>& boxes, float thr) {
    std::sort(boxes.begin(), boxes.end(), [](const Box& b1, const Box&b2) -> bool {
        return b1.score > b2.score;
    });

    vector<Box> res;
    vector<bool> supress(boxes.size(), false);

    for (int i = 0; i < boxes.size(); i++) {
        if (!supress[i]) {
            res.push_back(boxes[i]);

            for (int j = i + 1; j < boxes.size(); j++) {
                if (!supress[j] && iou(boxes[j], res.back()) > thr) {
                    supress[j] = true;
                }
            }            
        }

    }
    return res;
}

计算机几何基础

1点到线段的距离

#include <iostream>
#include <cmath>
using namespace std;

struct Point {
    double x, y;
};

double distance(Point p1, Point p2) {
    return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
}

double distanceToLineSegment(Point p, Point p1, Point p2) {
    double area = abs((p1.x - p.x) * (p2.y - p.y) - (p1.y - p.y) * (p2.x - p.x));
    double len = distance(p1, p2);
    double dist = area / len;  // 根据二者面积相等计算

    double dotProduct = (p.x - p1.x) * (p2.x - p1.x) + (p.y - p1.y) * (p2.y - p1.y);
    if (dotProduct < 0) {  // 计算PP1,P2P1的夹角是否大于90度。
        return distance(p, p1);
    }

    dotProduct = (p.x - p2.x) * (p1.x - p2.x) + (p.y - p2.y) * (p1.y - p2.y);
    if (dotProduct < 0) {   // 计算PP2,P1P2的夹角是否大于90度。
        return distance(p, p2);
    }

    return dist;
}

2 点是否在三角形内

判断(AOxAB) · (AOxAC) < 0,(BOXBA) · (BOXBC) < 0, (COxCA)·(COxCB) < 0,三者同时小于零。

3 判断两条线段是否相交

这两个博客讲的更简单,通过快速排斥和跨立实验 https://blog.csdn.net/HelloZEX/article/details/80880385 https://blog.csdn.net/myf_666/article/details/124385438

这个博客讲的太复杂了 https://www.cnblogs.com/tuyang1129/p/9390376.html
在这里插入图片描述

4 已知三角形三个顶点,计算夹角

先计算叉积,再计算点积。叉积表示sin,点积表示cos,再用atant2计算夹角。

注:c++中std::atan2和std::atan有什么区别?

在C++中,std::atanstd::atan2都是数学函数,用于计算反正切值,但它们有以下主要区别:

  • std::atan(y)只接受一个参数,返回该参数的反正切值,结果在[][−π/2,π/2][−π/2,π/2]范围内。
  • std::atan2(y, x)接受两个参数,返回点(x, y)与正x轴之间角度的反正切值,结果在[−π,π]范围内。这允许atan2正确处理所有四个象限的角度,而atan只能处理两个象限。

std::atan2因此提供了更全面的角度计算功能,能够基于x和y的符号确定正确的角度,是处理二维空间角度的首选函数。

5 计算三角形面积

|(AB X AC)| / 2

6 计算任意多边形面积

按顺序每次连接相邻的两点和原点,构成一个三角形,计算该三角形的面积(计算叉积,不用管正负号,叉积对于凸多边形都是正的,对于凹多边形有正有负,刚好抵消),累加所有三角形的面积。

7 已知平面上的三个点A(x1,y1)、B(x2,y2)、C(x3,y3),判断它们是否在一条直线上?

方法一:判断向量AB和向量AC的斜率是否相等。即(y2 - y1)/(x2 - x1) == (y3 - y1)/(x3 - x1).为了防止除数为零的问题可以把这个判断转成乘法:(y3 - y1) * (x2 - x1) - (y2 - y1) * (x3 - x1)==0

8 判断一堆点是否位于两条直线上

https://www.cnblogs.com/ccut-ry/p/8734329.html

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

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

相关文章

【仿真基本功】【PyTorch】从头安装PyTorch(GPU版本)【2024/03/03更新】

【仿真基本功】【PyTorch】从头安装PyTorch&#xff08;GPU版本&#xff09;【2024/03/03更新】 安装步骤1. 安装Anaconda2. 查看显卡对CUDA版本的支持3. 查看PyTorch的安装需求4. 安装PyTorcha) 配置新环境b) 进入新环境c) 按照CUDA版本要求&#xff0c;必须小于等于显卡支持的…

Linux系统——Tomcat优化

目录 一、JVM组成 1.JVM的组成及详解 2.内存的由来 3.虚拟机 3.1 Garbage 垃圾确定方法 3.2垃圾回收基本算法 3.2.1标记-清除 Mark-Sweep 3.2.2标记压缩&#xff08;压实&#xff09;Mark-Compact 3.2.3复制 Copying 3.2.4 多种算法总结 3.2.5拓展——STW 4.分代堆…

C语言-------指针进阶(2)

1.指针数组 指针数组表较简单&#xff0c;类比整型数组&#xff0c;字符数组&#xff0c;整型数组里面的元素都是整型变量&#xff0c;字符数组里面 的元素是字符类型&#xff0c;那么指针数组就是数组里面的每个元素都是指针类型&#xff0c;例如int*arr[5]就是一个 指针数…

数字化转型导师坚鹏:金融机构数字化营销方法和案例研究

金融机构数字化营销方法和案例研究 课程背景&#xff1a; 很多金融控股集团存在以下问题&#xff1a; 不清楚金融机构数字化营销方法&#xff1f;&#xff08;以证券、保险、租赁行业为例&#xff09; 不清楚金融机构数字化营销案例&#xff1f;&#xff08;以证券、保险…

成功案例(IF=13.8)| 基因组de novo联合Hi-C组装萝卜高质量基因组

1 研究背景 萝卜&#xff08;Raphanus sativus L.&#xff09;是世界范围内重要的根茎蔬菜作物。肉质主根是最重要的可食器官&#xff0c;提供了许多有益的营养物质&#xff0c;包括碳水化合物、矿物质、核黄素、植物化学物质和膳食纤维。然而&#xff0c;尽管萝卜具有生物学…

24V转3.3V 36V转5V 60V转5V降压芯片 H6246

24V转5V降压芯片的工作原理&#xff1a; 通过控制开关管和脉冲宽度调制&#xff08;PWM&#xff09;技术实现的。当输入电压为24V时&#xff0c;芯片会将其通过开关管进行开关调节&#xff0c;控制电流的流动。同时&#xff0c;芯片还会利用PWM技术&#xff0c;调节开关管的开…

【喜报】蚂蚁科技成功获聘隐私计算联盟副理事长单位!

蚂蚁科技获聘信通院隐私计算联盟副理事长单位 近日&#xff0c;由中国信息通信研究院、中国通信学会、隐私计算联盟等单位联合承办的隐私计算大会上&#xff0c;蚂蚁科技集团股份有限公司获聘2023-2024年度"隐私计算联盟副理事长"单位。 隐私计算联盟是在工业和信息…

Spring初始(相关基础知识和概述)

Spring初始&#xff08;相关基础知识和概述&#xff09; 一、Spring相关基础知识&#xff08;引入Spring&#xff09;1.开闭原则OCP2.依赖倒置原则DIP3.控制反转IoC 二、Spring概述1.Spring 8大模块2.Spring特点2.Spring的常用jar文件 一、Spring相关基础知识&#xff08;引入S…

watchdog---基于python的文件夹监控框架

说明及介绍 watchdog是一个用于监控文件系统变化的Python库&#xff0c;可以监控文件或目录的创建、修改、删除等操作。watchdog可以通过监听文件系统事件来实时监控文件或目录的变化&#xff0c;当文件系统中的文件或目录发生变化时&#xff0c;watchdog会触发相应的事件&…

AFL mmap

fuzz_one函数中看到这么一句话 orig_in in_buf mmap(0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);对mmap不太理解&#xff0c;不明白这句话的意思。 首先&#xff0c;得去了解下mmap函数是干什么的&#xff0c; 找到一个简单易懂的博客&#xff1a;https://www.j…

RT-DETR算法优化改进: 特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合RT-DETR,实现涨点。 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/…

第15届蓝桥STEMA测评真题剖析-2024年1月28日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第173讲。 第15届蓝桥第4次STEMA测评&#xff0c;这是2024年1月28日举办的STEMA&#xff0c;比赛仍然采取线上形式。这…

c++数据结构算法复习基础-- 3 --线性表-单向链表-笔试面试常见问题

1、单链表逆序 思路图 代码实现 //著: 链表结构里记得加 friend void ReverseLink(Clink& link); void ReverseLink(Clink& link) {Node* p link.head_->next_;while( p nullptr){return;}Node* q p->next_;link.head_->next_ nullptr;while(p ! nullpt…

linux常用的解压缩工具介绍

在Linux系统中&#xff0c;解压缩文件是一种常见的操作。有多种工具可以用来解压缩文件&#xff0c;它们各自有不同的特点和优势。以下是一些常用的Linux解压缩工具&#xff0c;以及它们之间的区别。 1. tar tar是一个强大的文件打包和解包工具&#xff0c;它可以用来打…

基于springboot+vue的响应式企业员工绩效考评系统(源码+论文)

文章目录 前言 一、功能设计 1 普通员工功能 2 主管功能 3 系统管理员功能 4 评分标准功能 5 PC端与手机端 6 制图 二、功能实现 普通员工 1普通员工登录 2公告板块 3日志板块 主管 1主管登录 2公告板块 3日志板块 4绩效评分板块 5个人信息板块 系统管理员…

身份证识别系统(安卓)

设计内容与要求&#xff1a; 通过手机摄像头捕获身份证信息&#xff0c;将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。1&#xff09;所开发Apps软件至少需由3-5个以上功能性界面组成。要求&#xff1a;界面美观整洁、方便应用&#xff1b;可以使用Android原生…

基于springboot+vue的校园爱心捐赠互助管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着经济水平和生活水平的提高在校大学生在校需要处理的物品也在不断增加&#xff0c;同时校园内还存在很多贫困生&#xff0c;可以通过线上平台实现资源的整合和二次利用&#xff0c;通过线上平台求助信…

c语言内存分配知识,堆,栈,全局静态,常量,代码

c语言中一些内存的作用 参考&#xff1a;https://blog.csdn.net/m0_49768044/article/details/131391832&#xff0c;其他

CSS列表属性

CSS列表属性 列表相关的属性&#xff0c;可以作用在 ul、ol、li 元素上。 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul {/* …

C++:类与对象(3)

创作不易&#xff0c;感谢三连 一、深入解析构造函数 如上图&#xff0c;在一般情况下&#xff0c;我们认为A类中的_a1和_a2只不过是声明&#xff0c;并没有开空间&#xff0c;而真正的空间开辟是在【定义】的时候&#xff0c;也就是我们根据这个类实例化出整个对象的时候。 …