Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >计算几何之【映像】

计算几何之【映像】

作者头像
灯珑LoGin
发布于 2022-10-31 05:11:48
发布于 2022-10-31 05:11:48
57500
代码可运行
举报
文章被收录于专栏:龙进的专栏龙进的专栏
运行总次数:0
代码可运行

映像就是点p关于线段p1,p2对称的点x

求映像就要先求出p在线段上的投影点pp,然后把p投影点pp的向量放大两倍并与p点坐标相加,那么就求出了点x

题目:CGL_1_B

AC代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <algorithm>
#include<math.h>
#include<iomanip>
#include<cstdio>
using namespace std;

class Point
{
public:
    double x, y;
    Point()
    {
    }
    Point(double x, double y)
    {
        (*this).x = x;
        (*this).y = y;
    }

    double operator^(const Point &p) const //叉乘
    {
        return x * p.y - y * p.x;
    }

    double operator*(const Point &p) const //点乘
    {
        return x * p.x + y * p.y;
    }

    Point operator*(const double &d) const
    {
        return Point(x * d, y * d);
    }

    Point operator/(const double &d) const
    {
        return Point (x/d,y/d);
    }

    Point operator-(const Point &p) const
    {
        return Point(x - p.x, y - p.y);
    }

    Point operator+(const Point &p) const
    {
        return Point(x+p.x,y+p.y);
    }

    double sqr()
    {
        return x * x + y * y;
    }
    double abs()
    {
        return sqrt(sqr());
    }


    void print()
    {
        
        printf("%.10lf %.10lf\n",x,y);
    }

};

int main()
{
    

    double x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;

    Point p1 = Point(x1, y1);
    Point p2 = Point(x2, y2);

    Point line = p2 - p1;

    int q;
    cin >> q;

    double x0, y0;
    Point p;
    while (q--)
    {
        cin >> x0 >> y0;
        p = Point(x0, y0);

        Point pp;
        pp = p1 + line * ((p - p1) * line) / line.sqr();
        pp=pp-p;

        Point ans = p+pp*2;
        ans.print();

    }

转载请注明来源:https://www.longjin666.top/?p=780

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年2月2日20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
曼哈顿距离最小生成树
1.曼哈顿距离:给定二维平面上的N个点,在两点之间连边的代价。(即distance(P1,P2) = |x1-x2|+|y1-y2|)
风骨散人Chiam
2020/10/28
9650
计算几何之【投影】
把p与线段上的一个点相连,求连接生成的这个向量在线段上的投影的长度,然后用这个投影的长度与线段长度作比,再对x,y坐标分别加上去就可以了。
灯珑LoGin
2022/10/31
4850
hdu 4063 Aircraft 计算几何+最短路
易知最短路一定是以圆心或者两圆交点作为中间点到达的。所以把这些点拿出来建图跑最短路就够了。
全栈程序员站长
2022/07/07
2420
计算几何——判断点与向量的关系
当叉乘等于零的时候,可以用点乘来判断关系。点乘为负数则是第三种情况,点乘为正,则通过向量的模长来判断。
灯珑LoGin
2022/10/31
1.1K0
计算几何——判断点与向量的关系
计算几何之求两线段的交点
思路就是连接线段的端点,构造向量,从而构造出相似三角形,然后求出交点在一条线段上的位置(用比例t来表示),然后再加到线段端点上就可以了。
灯珑LoGin
2022/10/31
9750
第六章第三十九题(几何:点的位置)(Geometry: point position) - 编程练习题答案
6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧,或在该直线上。使用下面的方法头编写该方法:
无刺鱼
2022/03/29
1910
2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub
Angel_Kitty
2018/04/09
8670
2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
ZOJ 1648 Circuit Board(计算几何)
Circuit Board Time Limit: 2 Seconds Memory Limit: 65536 KB On the circuit board, there are lots of circuit paths. We know the basic constrain is that no two path cross each other, for otherwise the board will be burned. Now given a circuit diagram
ShenduCC
2018/04/26
6480
计算几何之线段相交问题(平面扫描)
求n条线段的交点,可以用抽选配对的方式来遍历所有的情况,这样子时间复杂度为O(n2).
灯珑LoGin
2022/10/31
1K0
计算几何之线段相交问题(平面扫描)
计算几何之判断线段相交
两条线段都满足“另一条线段的两个端点分别位于当前线段的顺时针方向和逆时针方向”,那么这两条线段相交。
灯珑LoGin
2022/10/31
4950
2020安徽程序设计省赛 I美丽几何
在平面上有n 个点,初始每个点的美丽值都为0,任意选择两个点组成一条直线,对于每一条直线,如果存在一个点,这个点到这条直线的距离小于其他n-3 个点到这条直线的距离,那么我们把这个点的美丽值加1。为了简化输出,我们只需要输出所有点的美丽值的异或值,保证三点不共线。
程序员小涛
2021/12/06
5540
POJ 1066--Treasure Hunt(判断线段相交)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7857 Accepted: 3247 Description
Enterprise_
2019/02/20
3260
洛谷P1742 最小圆覆盖(计算几何)
再枚举一个点\(j\),如果该点在圆内继续,否则用\(i, j\)构造出的圆替换出之前的圆。
attack
2019/03/04
6050
ACM刷题之路(六)直线相交问题 POJ3304 Segments
Given n segments in the two dimensional space, write a program, which determines if there exists a line such that after projecting these segments on it, all projected segments have at least one point in common.
Designer 小郑
2023/07/31
1640
ACM刷题之路(六)直线相交问题 POJ3304 Segments
ECUST 09年 校赛个人赛第八场(最后一场)总结
这次我只AC了一题(在结束的那一刻,另一题在题目来源地网站上AC了,我们的OJ上仍然WA,我们OJ的Special Judge真是—_—!)
owent
2018/08/01
2570
外卖小哥
缘起 大家知道 外卖小哥都是很辛苦的. 所以他们巴不得从接单处到用户住处能以最短路到达. 你能帮帮他们吗? Uva 248 Cutting Corners 分析 平面上有一些矩形建筑物,一个人骑车从起
ACM算法日常
2020/07/20
7850
外卖小哥
计算几何之求圆与直线的交点
求圆与直线的交点的方法是: 求圆心c在直线l上的投影点pr 求出直线l上的单位向量e 根据r和pr的长度来计算出圆内线段部分的一半base 用pr±base*e即得到答案 题目:CGL_7_D AC代码: #include <iostream> #include <cstdio> #include <math.h> using namespace std; #define COUNTER_CLOCKWISE -1 //逆时针 #define CLOCKWISE 1 //顺时针 #de
灯珑LoGin
2022/10/31
1.2K0
计算几何之求圆与直线的交点
计算几何之圆与圆的交点
计算圆与圆的交点,需要用到余弦定理 步骤如下: 求出两个圆的圆心距d 求出向量c2.c-c1.c与c1.c到某交点的向量夹角a 求出向量c2.c-c1.c与x轴的夹角t 那么,两个交点就分别是以c1.c为起点,大小为c1.r,角度为t+a、t-a的两个向量 题目:CGL_7_E AC代码: #include <iostream> #include <cstdio> #include <math.h> using namespace std; #define COUNTER_CLOCKWISE -1 /
灯珑LoGin
2022/10/31
7050
计算几何之圆与圆的交点
从两道题来讨论一下模拟退火算法
钢铁在退火的时候,其中某一点的温度是在不断变化的,也就是反复横跳的。模拟退火算法模拟了这一过程,在模拟精度达到一定的时候,可以实现得到全局最优解。
灯珑LoGin
2022/10/31
2890
ACM计算几何篇_acm数学
https://linxi99.gitee.io/20190211/ACM计算几何篇/
全栈程序员站长
2022/11/19
1.4K0
ACM计算几何篇_acm数学
相关推荐
曼哈顿距离最小生成树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验