与坐标轴平行的矩形和圆的位置关系。

分两种情况。

圆与矩形交集不为空

此时答案为零。问题归结为如何判断圆与矩形交集不为空。

先排除矩形顶点在圆内或圆心在矩形内。
此时,若矩形与圆交集不为空,则必有矩形的某条边穿过圆(「穿过圆」也可表述为「割圆」,「线段穿过圆」的确切定义为「线段与圆周有两个交点」)。注意:这样的边可能不止一条。

问题归结为如何判断线段是否割圆。

线段割圆的充要条件是圆心到线段所在直线的垂直投影落在线段上,且圆心到投影的距离小于半径。

矩形的左下顶点为 $(x_1, y_1)$,右上顶点为 $(x_2, y_2)$,圆心为 $(x, y)$,半径为 $r$ 。
不失一般性,考虑矩形的底边 $(x_1, y_1) , (x_2, y_1)$ 割圆的条件。

性质

在排除了矩形的某个顶点在圆内或圆心在矩形内的条件下,矩形的底边上有点在圆内当且仅当
$x_1 < x < x_2$ 且 $|y - y_1| \le r$ 。

其余边的情形是类似的。

圆与矩形交集为空的情形

此时应当注意到:

  1. 矩形上距离圆周最近的点必然在边界上。
  2. 矩形边界上任意一点 $P$ 到圆周的最短距离为 $|PC| - r$,$|PC|$ 表示 $P$ 到圆心 $C$ 的距离。
  3. 问题归结为求圆心 $C$ 到矩形边界的最短距离,亦即点到线段的最短距离

备选的点(candidates)是圆心在四条边所在的直线上的垂直投影(即垂足)与边的端点。
如果「圆心在矩形的某条边所在的直线上的垂直投影」落在这条边上则此投影点是这条边上的备选点,否则这条边的两端点是这条边上的备选点。


这一部分内容还在建设中

举一反三

  • 如果矩形不是坐标轴平行的,通过坐标变换就可以转化到坐标轴平行的情形。
    如何进行坐标变换?

首先假设我们想要的坐标变换是一个线性变换。

任取矩形的一个顶点 $A$,作为此线性变换的不动点。设 $A$ 的坐标为 $(x_A, y_A)$ 。
任取 $A$ 的一个邻点 $B$,使得 $\vec{AB}$ 是变换过后的 $x$ 轴正方向,亦即 $B$ 变换过后的坐标为 $(x_A + |AB|, y_A)$,$|AB|$ 表示线段 $AB$ 的长度。

  • 将矩形换成任意凸多边形怎么做?

问题归结为求点到线段的最短距离。

Offer 收割编程练习赛 87B 方圆距离的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  4. hihocoder offer收割编程练习赛9 B 水陆距离

    思路: 宽搜,多个起点. 实现: #include <iostream> #include <cstdio> #include <algorithm> #inclu ...

  5. 【[Offer收割]编程练习赛9 B】水陆距离

    [题目链接]:http://hihocoder.com/problemset/problem/1478 [题意] [题解] 一开始把所有的水域的位置都加入到队列中去; 然后跑一个bfs. 第一次到达的 ...

  6. [Offer收割] 编程练习赛63

    题目1 : 命名 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 有两个公司想要合并,第一个公司的名字是一个字符串S,第二个公司的名字是一个字符串T. 合并后的新公司是这样 ...

  7. [Offer收割]编程练习赛9,10

    题目1 : 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差. ...

  8. hihocoder [Offer收割]编程练习赛14

    A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...

  9. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

随机推荐

  1. SAP标准导出功能 - 删除默认选定格式

    我们经常会使用SAP系统的标准功能导出ALV显示的数据,一般会选择电子表格. 选择电子表格之后,需要选择电子表格的具体格式. 选择格式之后点击确定,会弹出保存对话框. 如果在使用这个功能的时候,选择了 ...

  2. CentOS使用yum安装drbd

    CentOS 6.x系统要升级到最新的内核才支持 CentOS 6.x rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noa ...

  3. openldap完整版本搭建记录

    文档信息 目        的:搭建一套完整的OpenLDAP系统,实现账号的统一管理.                     1:OpenLDAP服务端的搭建                   ...

  4. 微信小程序开发入门学习(2):小程序的布局

    概述 小程序的布局采用了和Css3中相同的 flex(弹性布局)方式,使用方法也类似(只是属性名不同而已). 水平排列 默认是从左向右水平依次放置组件,从上到下依次放置组件. 任何可视组件都需要使用样 ...

  5. JavaScript---ECMA对象

    1.对象的概念及分类 1.1 ECMAScript中没有类,但定义了“对象”,逻辑上等价于其他程序设计语言中的类. var o = new Object(); 1.2 本地对象(native obje ...

  6. http网络协议 学习摘要

    一:HTTP协议状态码 状态码主要用于描述当客户端向服务器发送请求时的返回结果,标记服务端的处理是否正常,通知出现的错误等工作. 状态码整体分为五大类: 1开头的状态码:信息类状态码,主要接收请求,表 ...

  7. 关于IT术语---ip、uv、pv、tps、qps、rps

    涉及到IT方面的几条术语,这里要好好说道说道: 只要和网站打交道,难免会经常听到一系列的转有名词  >>>  系统今日UV多少.PV多少.QPS多少之类的问题.这里就对这些常见的术语 ...

  8. 笔记-docker-3 使用

    笔记-docker-3 使用 1.      镜像 image是docker最重要的概念,docker运行容器前需要本地存在对应的镜像,如果没有,会尝试从默认镜像库下载. 1.1.    镜像获取 查 ...

  9. 4.Mongodb数据查询2

    1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 ...

  10. Reverse Word in a String(翻转字符串)&字符串最后一个单词的长度

    1.题目: Given an input string, reverse the string word by word. For example,Given s = "the sky is ...