Content

给出平行四边形的三个顶点 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),求出所有可能的第四个顶点。

数据范围:\(\forall i\in[1,3],-1000\leqslant x_i,y_i\leqslant 1000\)。

Solution

这题可以通过平行四边形的一个性质轻松搞定——平行四边形的对角线互相平分

啥啥啥?你还不知道什么是平行四边形?

因为太占空间,去这里看吧qwq。

那么用这个有什么用呢?

我们都知道,一条线段 \(AB\) 的中点计算公式是 \((\dfrac{x_A+x_B}{2},\dfrac{y_A+y_B}{2})\),那么我们来看到下面这个平行四边形:

那么,我们通过上面这个平行四边形的性质可以得到,\(AC\) 和 \(BD\) 的中点是同一个点。那么我们就有:

\[\begin{cases}\dfrac{x_A+x_C}{2}=\dfrac{x_B+x_D}{2}&...(1)\\\dfrac{y_A+y_C}{2}=\dfrac{y_B+y_D}{2}&...(2)\end{cases}
\]

将 \((1)\) 式和 \((2)\) 式分别都乘上 \(2\)可以得到:\(x_A+x_C=x_B+x_D,y_A+y_C=y_B=y_D\)。

所以,现在假设 \(A,B,C\) 三个点为题目中的已知点,那么第四个点 \(D\) 可以有以下几种:

我们可以通过计算得到:

\(D_1(x_A+x_C-x_B,y_A+y_C-y_B)\)

\(D_2(x_A+x_B-x_C,y_A+y_B-y_C)\)

\(D_3(x_B+x_C-x_A,y_B+y_C-y_A)\)

我们可以发现,有且仅有以上这三个点符合要求。因此,满足点的个数为 \(3\),坐标直接按照上面的公式输出即可(顺序可以任意)。

Code

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std; int x1, y1, x2, y2, x3, y3; int main() {
scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3);
printf("3\n%d %d\n%d %d\n%d %d", x2 + x3 - x1, y2 + y3 - y1, x1 + x3 - x2, y1 + y3 - y2, x1 + x2 - x3, y1 + y2 - y3);
}

最新文章

  1. Django入门1
  2. 微信小程序开发技巧及填坑记录
  3. web安全之sql注入报错型注入
  4. ACM Same binary weight
  5. Dynamic CRM 2013学习笔记(四十五)修改实体及字段的前缀(不用new_开头)
  6. IOS组件绑定无效错误
  7. CIO的职责、条件及价值
  8. *HTML5 新元素
  9. java学习进制转换之查表法
  10. Android在子线程中更新UI(一)
  11. linux iptable 设置实践
  12. select取值问题
  13. kindeditor用法简单介绍
  14. 基于LinkedList实现桶排序
  15. es6 语法 (Proxy和Reflect 的对比)
  16. 学习javascript怎么入门,初学者5条建议
  17. RestTemplate 发送 get 请求使用误区 多值为null
  18. JVM的GC策略
  19. 纯文本抽出程序库DMC TEXT FILTER
  20. hadoop修改

热门文章

  1. 『与善仁』Appium基础 — 12、Appium的安装详解
  2. 简单聊下.NET6 Minimal API的使用方式
  3. CF1264D2 Beautiful Bracket Sequence (hard version)
  4. 【CSP2019】【洛谷5657】格雷码
  5. Codeforces 295D - Greg and Caves(dp)
  6. JSOI(联合省选)2021 划水记
  7. C语言 自定义函数按行读入文件
  8. Bootstrap实战 - 瀑布流布局
  9. Java发HTTP POST请求(内容为xml格式)
  10. haproxy动态增减主机与keepalived高级应用