玲珑杯-射击气球-点到线段的距离
玲珑杯-射击气球-点到线段的距离
求点到线段的距离
由于网页显示吃tab键,缩进无法正常显示
对于空间V-xyz三维几何中点到水平线段的距离,可以投影到xy平面(欧式几何)上。distance = √(∆h ^2 + d ^2);
其中d为投影xy平面上的点到线段的距离。
线段端点a(x1, y1), b(x2, y2),任一点vxt, yt)。
若两端点a,b是否共点
d = 两点间距离
否则
若两端点和任意点v共线(用点积结果判断)
若 v 在线段ab上
d = 0;
否则 d = min(|va|, |vb|);
否则
若三点组成钝角三角形(用余弦定理判断)
d = min(|va|, |vb|);
否则 d = 三角形abv的以ab为底的高(用点乘求得)
今天玲珑杯的A题,题不难,但过的不多,用了一些高中数学知识,大概这就是为啥高中生虐了大学生的部分原因吧。
#include <iostream>
#include <cstdio>
#include <queue>
#include <stack>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int maxn = 1e4 + 7;int main()
{ios::sync_with_stdio(false);int t;cin >> t;while(t--) {int x1, y1, H, x2, y2;cin >> H >> x1 >> y1 >> x2 >> y2;int x0, y0, h0, x, y, h;cin >> x0 >> y0 >> h0 >> x >> y >> h;int n;double line = sqrt(pow(x1 - x2, 2.0) + pow(y1 - y2, 2.0));cin >> n;while(n--) {int t;cin >> t;int xt = x0 + t* x;int yt = y0 + t * y;int ht = h0 + t * h;double d;if (x1 == x2 && y1 == y2) { //重合 d = sqrt(pow(xt - x1, 2.0) + pow(yt - y1, 2.0));} else {if ((x1 - xt) * (y2 - yt) == (x2 - xt) * (y1 - yt)) { //共线 if(xt >= min(x1, x2) && yt <= max(y1, y2)) {d = 0.0;} else {d = min(sqrt(pow(x1 - xt, 2.0) + pow(y1 - yt, 2.0)),sqrt(pow(x2 - xt, 2.0) + pow(y2 - yt, 2.0)));}}else {if (line * line + pow(xt - x1, 2.0) + pow(yt - y1, 2.0) < pow(xt - x2, 2.0) + pow(yt - y2, 2.0) ||line * line + pow(xt - x2, 2.0) + pow(yt - y2, 2.0) < pow(xt - x1, 2.0) + pow(yt - y1, 2.0))d = min(sqrt(pow(x1 - xt, 2.0) + pow(y1 - yt, 2.0)),sqrt(pow(x2 - xt, 2.0) + pow(y2 - yt, 2.0)));else d = fabs((x1 - xt) * (y2 - yt) - (x2 - xt) * (y1 - yt)) / line; }}double ans = sqrt(pow(ht - H, 2.0) + d * d);printf("%.2lf\n", ans);}}return 0;
}
玲珑杯-射击气球-点到线段的距离相关推荐
- c# 计算点到线段的距离
//计算点到线段的距离 public double pointToLine(Vector2 point,LineBase line) {//距离double distance =0;//线段的起点与终 ...
- 点到直线的距离c语言程序,点到线段的距离 题解(C++)
初步分析 这道题之前有<点到直线的距离>一题. 如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准): 对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间 ...
- costmap_2d 中计算footprint 的内切圆半径和外切圆半径的函数解析——点到线段的距离计算
计算footprint 的内切圆半径和外切圆半径,用到点到线段的距离,计算方法 两个向量的点积等于一个向量在另一个向量的投影 乘以 另一个向量的模 点到线段的三种情况如下: /*作用:计算点到线段的距 ...
- 向量法计算空间点到线段的距离(python)
中学数学告诉我们,计算点到线段的距离有两种. 我们假设点是P,线段是AB.P和AB都由三维的笛卡尔坐标表示.现计算P到AB的距离. 第一种是,过点P向线段AB上画垂线,判断垂足有没有落在线段上.如果落 ...
- python 点到线段的距离_点到线段的最短距离
博客转载自:http://blog.sina.com.cn/s/blog_5d5c80840101bnhw.html 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线 ...
- 关于计算点到线段的距离
已知线段AB,求某点到该线段的距离.有三种情况,如图:图中只画出两种,其实垂足在另一侧也是一样的.还有就是垂足与A或B共点,这两种情形可以按照前述两种情况任意之一处理. 当垂足在线段上时(包括垂足与A ...
- 点到线段的距离计算方法
如何计算点到线段的最近距离 算法原理图 在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能 如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的 无论二维还是 ...
- 点到线段的距离_直线垂直,垂线的性质,点到直线的距离
欢迎关注公z号:沈阳奥数 两条直线相交所成的四个角中,有一个角是直角时,就说这两条直线互相垂直,其中一条直线叫做另一条直线的垂线,它们的交点叫垂足. 如图,直线AB与CD垂直于点E,记作:AB⊥CD于 ...
- URAL 1348. Goat in the Garden 2[求点到线段的距离]
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1348 题目的意思是:求一个点到线段的最短距离和最长距离.. 最长距离比较容易,就是求点到 ...
最新文章
- jvm垃圾内存回收问题
- PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
- 【Python学习】 - Matplotlib二维绘图 - plt.matshow()和plt.imshow()区别对比
- jackson 的注解:@JsonProperty、@JsonIgnore、@JsonFormat 用法说明
- (27)FPGA面试题动态时序模拟
- 熊猫python小课靠谱吗_新的投资风向标在哪里?
- linux脚本 校准时区,shell脚本校准系统和bios时间
- html 段前空格_前端 -- HTML
- [20190524]DISABLE TABLE LOCK(12c).txt
- c语言小程序 祝你生日快乐!
- 超市便利店批发行业企业仓库,使用盘点机PDA扫描商品条码高效盘点,库存管不准怎么办
- 6502精品仿真软件(联锁)
- C++ template调试模板(6.6节)
- linux一键安装aria2,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
- 【PYTHON】利用Python爬取电影网站
- AlphaGo Zero 初探
- 高速窄脉冲峰值保持设计
- RGB颜色对照表(全)
- Linux重启命令shutdown与reboot
- java接口支持ajax,【JavaWeb】jQuery对Ajax的支持
热门文章
- 在html中加入pdf文件吗,如何在网页中显示PDF文件
- 3.5折怎么用计算机算,论几十块钱的小主机能干什么?手把手教你改造神器!(32位黑裙晖安...
- Effective JavaScript Item 23 永远不要修改arguments对象
- 文化传播有限公司网站源码dian
- T100 genero report (GR) 凭证报表开发流程
- 条款20 宁以pass-by-reference-to-const替换pass-by-value
- 看完这篇文章保你面试稳操胜券 ——(必考题)javaScript 篇
- ACDREAM 05D 哗啦啦族的加法计算(DFS专场)
- TryHackMe学习笔记-Windows PrivEsc Arena
- ui设计教程分享:关于Logo设计要素