首页 > 其他分享 >【计算几何】学习笔记

【计算几何】学习笔记

时间:2024-04-05 14:45:43浏览次数:21  
标签:直线 int 点斜式 笔记 double 学习 斜率 截式 几何

计算几何

用计算机解决几何问题,显然计算机(至少在 OI/CPC 中)是不能处理复杂的图形的,所以解决方法和数学中解析几何类似。

直线

直线有四种表示方法:斜截式,点斜式,两点式,一般式。
斜截式:\(y=kx+b\),其中 \(k\) 为直线的斜率,\(b\) 为截距。两点(设为\((x_1,y_1),(x_2,y_2)\))确定一条直线,则这条直线的斜率 \(k = \frac{x_1-x_2}{y_1-y_2}\)。注意当直线平行于 \(y\) 轴时不能用斜截式表示。
点斜式:对求斜率公式移项,把一个点当任意点,另一个点坐标已知(设为\((x_0,y_0)\)),则有 \(y - y_0 = k (x - x_0)\)

例题:luogu P1142 轰炸

先枚举直线(枚举两点计算斜率),然后计算有多少点在这条直线上(带入点斜式公式),取最大值即可。
参考代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 705;
const double eps = 1e-8;

int n, ans = 1;

int x[N], y[N];

bool dcmp(double x, double y)
{
    return abs(x - y) <= eps;
}

double calc_k(int x_1, int y_1, int x_2, int y_2)
{
    return double(y_1 - y_2) / (x_1 - x_2);
}

signed main()
{
    ios::sync_with_stdio(false);
#ifdef DEBUG
    freopen("data.in", "r", stdin);
    freopen("data.out", "w", stdout);
#endif

    // Don't stop. Don't hide. Follow the light, and you'll find tomorrow.

    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> x[i] >> y[i];
    for (int i = 1; i <= n; i++)
        for (int j = i + 1; j <= n; j++)
            if (x[i] != x[j])
            {
                int res = 0;
                double k = calc_k(x[i], y[i], x[j], y[j]);
                for (int p = 1; p <= n; p++)
                    res += dcmp(y[p] - y[i], k * (x[p] - x[i]));
                ans = max(ans, res);
            }
            else // 平行于 y 轴的直线
            {
                int res = 0;
                for (int p = 1; p <= n; p++)
                    res += x[p] == x[i];
                ans = max(ans, res);
            }

    cout << ans << endl;

    return 0;
}

凸包

标签:直线,int,点斜式,笔记,double,学习,斜率,截式,几何
From: https://www.cnblogs.com/JXOIer-zaochen/p/18115747

相关文章

  • 基于深度学习的田间杂草检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本博客深入探讨了基于YOLOv8/v7/v6/v5的田间杂草检测系统,其中核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详细介绍了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,以及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、......
  • ArkTS--学习笔记
    入门:声明式组件化案例1:垃圾箱代码:@Entry@ComponentstructDeleteButtonPage{build(){Column(){Button(){Image("pages/helloworld/delete/solution/images/ic_delete.png").width(25).height(25)}.widt......
  • 基于深度学习的商品标签识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5的商品标签识别,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头......
  • 基于深度学习的日常场景下的人脸检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5的日常场景下的人脸检测,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实......
  • python学习笔记——函数
     2. 函数****2.1. 定义****一段可以被另外一段代码执行的程序2.2. 语法****def函数名():函数体--语法return需要的返回值2.3. 调用****函数名()#定义函数*deftest_function():print('我是一个测试函数')#调用函数*ifname=='main':test_functi......
  • 基于深度学习的交通信号标志识别系统(网页版+YOLOv8_v7_v6_v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的交通信号标志检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比。详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,以及基于Streamlit的交互式Web应用界面设计。在Web网页中,用户......
  • 基于深度学习的交通信号灯检测系统(网页版+YOLOv8_v7_v6_v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5的交通信号灯检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,以进行性能指标对比。详细介绍了国内外的研究现状、数据集处理方法、算法原理、模型构建与训练过程,以及基于Streamlit的交互式Web应用界面设计。在Web界面中,用户可以......
  • 大语言模型LLM《提示词工程指南》学习笔记01
    文章目录大语言模型LLM《提示词工程指南》学习笔记01以下是使用不同LLM提供程序时会遇到的常见设置:标准提示词应该遵循以下格式:提示词要素大语言模型LLM《提示词工程指南》学习笔记01提示工程(PromptEngineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语......
  • JavaWeb学习笔记——第十五天
    Maven高级分模块设计与开发分模块设计就是将项目按照功能拆分成若干个子模块。优点:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。分模块设计需要先针对模块功能进行设计,再进行编码实现。不会先将工程开发完毕,然后进行拆分。继承与聚合继承继承描述的是两个......
  • MPPT学习笔记
    一、基本概述基础算法有三种:恒定电压法(不算真正的mppt)、扰动观察法(Perturb and Observe algorithms,P&O)、电导增量法(Incremental Conductancealgorithm,INC)智能优化算法:粒子群算法(PSO)、万有引力搜索算法(GravitationalSearchAlgorithm,GSA)、布谷鸟算法(CSA)等。......