海康威视 U3D客户端开发 一面

1. 自我介绍和项目介绍

2.怎么判断一个点在凸多边形里面

答案:如果是凸多边形,最常见的方法就是判断这个点是否始终在每一条边的同一侧。具体做法是依次计算多边形每条边和目标点构成的叉积,如果所有叉积同号,说明点在凸多边形内部;如果有正有负,说明点在外部。这种方法的好处是实现简单,时间复杂度是 O(n),很适合面试时手写。

代码:

#include <vector>
using namespace std;

struct Point {
    double x, y;
};

double cross(const Point& a, const Point& b, const Point& c) {
    return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}

bool isPointInConvexPolygon(const vector<Point>& poly, const Point& p) {
    int n = poly.size();
    if (n < 3) return false;

    double prev = 0;
    for (int i = 0; i < n; ++i) {
        double cur = cross(poly[i], poly[(i + 1) % n], p);
        if (cur != 0) {
            if (prev != 0 && cur * prev < 0) return false;
            prev = cur;
        }
    }
    return true;
}

3. 怎么判断一个点在平面多边形里面

答案:如果题目没有强调是凸多边形,那通常默认是普通多边形。这时候最常见的方法是射线法。从目标点向一个固定方向引一条射线,统计它和多边形边的交点个数。如果交点个数是奇数,说明点在多边形内部;如果是偶数,说明点在外部。这种方法实现比较通用,但要注意边界情况,比如点刚好在边上、射线经过顶点、水平边重复统计这些问题。

代码:

#include <vector>
#include <algorithm>
using namespace std;

struct Point {
    double x, y;
};

bool onSegment(const Point& a, const Point& b, const Point& p) {
    double cross = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);
    if (cross != 0) return false;
    return p.x >= min(a.x, b.x) && p.x <= max(a.x, b.x) &&
           p.y >= min(a.y, b.y) && p.y <= max(a.y, b.y);
}

bool isPointInPolygon(const vector<Point>& poly, const Point& p) {
    int n = poly.size();
    bool inside = false;

    for (int i = 0, j = n - 1; i < n; j = i++) {
        if (onSegment(poly[j], poly[i], p)) return true;

        bool intersect = ((poly[i].y > p.y) != (poly[j].y > p.y)) &&
                         (p.x < (poly[j].x - poly[i].x) * (p.y - poly[i].y) /
                                    (poly[j].y - poly[i].y) + poly[i].x);
        if (intersect) inside = !inside;
    }
    return inside;
}

4. Protobuf 和 JSON 的区别

答案:这两个本质上都是数据序列化方式,但特点不一样。JSON 是

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11136次浏览 95人参与
# 你的实习产出是真实的还是包装的? #
1966次浏览 42人参与
# 巨人网络春招 #
11380次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7655次浏览 43人参与
# 简历第一个项目做什么 #
31758次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433574次浏览 3926人参与
# MiniMax求职进展汇总 #
24133次浏览 309人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187230次浏览 1122人参与
# 牛客AI文生图 #
21453次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152470次浏览 888人参与
# 研究所笔面经互助 #
118976次浏览 577人参与
# 简历中的项目经历要怎么写? #
310388次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63881次浏览 828人参与
# 面试紧张时你会有什么表现? #
30518次浏览 188人参与
# 你今年的平均薪资是多少? #
213155次浏览 1039人参与
# 你怎么看待AI面试 #
180177次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64339次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76552次浏览 374人参与
# 我的求职精神状态 #
448151次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363545次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160685次浏览 1112人参与
# 校招笔试 #
471269次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务