海康威视 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
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3751次浏览 45人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16886次浏览 137人参与
# 巨人网络春招 #
11520次浏览 224人参与
# 春招至今,你的战绩如何? #
15630次浏览 144人参与
# 你的实习产出是真实的还是包装的? #
2964次浏览 52人参与
# 沪漂/北漂你觉得哪个更苦? #
1513次浏览 40人参与
# MiniMax求职进展汇总 #
25113次浏览 321人参与
# HR最不可信的一句话是__ #
1078次浏览 32人参与
# AI面会问哪些问题? #
935次浏览 23人参与
# 你做过最难的笔试是哪家公司 #
1228次浏览 22人参与
# AI时代,哪个岗位还有“活路” #
2814次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152901次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8007次浏览 43人参与
# XX请雇我工作 #
51155次浏览 171人参与
# 简历第一个项目做什么 #
32131次浏览 360人参与
# 简历中的项目经历要怎么写? #
311028次浏览 4264人参与
# 投格力的你,拿到offer了吗? #
178337次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76965次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187585次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64704次浏览 883人参与
# 如果重来一次你还会读研吗 #
230010次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364336次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务