编程:判断一个点是否在矩形内部

题目描述:

在二维坐标系中,所有的值是double类型,那么一个矩形可以由四个点来代表,(x1, y1)为最左的点,(x2, y2)为最上的点,(x3, y3)为最下的点,(x4, y4)为最右的点。
给定4个点代表的矩形,再给定一个点(x, y),判断(x, y)是否在矩形中

题目分析:

  1. 矩形的边平行于坐标轴
此时(x1, y1)为左上角的点,(x2, y2)为右上角的点,(x3, y3)为左下角的点,(x4, y4)为右下角的点。这种情况很好判断。
  1. 矩形的边不平行于坐标轴
此时,需要旋转矩形,使之平行于坐标轴。

#include<iostream>
#include<cmath>
using namespace std;

bool isInside(double x1, double x4, double y1, double y4, double x, double y)
{
    if(x <= x1) return false;
    if(x >= x4) return false;
    if(y >= y1) return false;
    if(y <= y4) return false;
    return true;
}

bool isInside(double x1, double y1, double x2, double y2, double x3, double y3,
             double x4, double y4, double x, double y)
{
    if(x1 == x3) return isInside(x1, x4, y1, y4, x, y);
    double l = y4 - y3;
    double k = x4 - x3;
    double s = sqrt(k * k + l * l);
    double sin = l / s;
    double cos = k / s;
    double x1r = cos * x1 + sin * y1;
    double y1r = -x1 * sin + y1 * cos;
    double x4r = cos * x4 + sin * y4;
    double y4r = -x4 * sin + y4 * cos;
    double xr = cos * x + sin * y;
    double yr = -x * sin + y * cos;
    return isInside(x1r, x4r, y1r, y4r, xr, yr);
}
int main()
{
    double x1, y1, x2, y2, x3, y3, x4, y4, x, y;
    cin >> x1 >> y1;
    cin >> x2 >> y2;
    cin >> x3 >> y3;
    cin >> x4 >> y4;
    cin >> x >> y;
    if(isInside(x1, y1, x2, y2, x3, y3, x4, y4, x, y))
    {
        cout << "Yes" << endl;
    }
    else
    {
        cout << "No" <<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/xiaobaizzz/p/12227288.html

时间: 2024-10-31 22:23:33

编程:判断一个点是否在矩形内部的相关文章

判断一个坐标是否在多边形内部

在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题. 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false. if (p.x < minX || p.x > maxX |

编程:判断一个点是否在三角形内部

题目描述: 在二维坐标系中,所有的值都是double类型,那么一个三角形可以由3个点来代表,给定3个点代表的三角形,再给定一个点(x, y),判断(x, y)是否在三角形中 题目分析: 方法1:面积法:如果点(x, y)在三角形内部,那么三个小三角形的面积相加等于大三角形面积. 注意:已知三角形三个点,求三角形面积. 方法2:向量法:如果点(x, y)在三角形内部,那么从某个点逆时针出发,点(x, y)都在每条边的左侧. 注意:判断一个点在一个有向边的左侧还是右侧. #include<iostr

编程判断一个树是完全二叉树(使用层次遍历实现)

完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同 如何判断一个树是完全二叉树 可以使用层序遍历,只需2个步骤 第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树 第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树 排除以上两种情况,则树是完全二叉树 核心代码: //层序遍历 int LayerOrder(BiTreeNode *head) { bool flag=0; LQueue Q; Initiate_Que

通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两个属性:矩形左上角坐标startX和startY。 两个构造方法: 带4个参数的构造方法,用于对startX、startY、width和height属性 初始化; 不带参数的构造方法,将矩形初始化为左上角坐标、长和宽都为0 的矩形; 添加一个方法: 判断某个点是否在矩形内部的方法

package b; public class Rect { Double width; Double height; public Double getWidth() { return width; } public void setWidth(Double width) { this.width = width; } public Double getHeight() { return height; } public void setHeight(Double height) { this

GMAP 判断一个坐标点是否在不规则多边形内部的算法

在gmap(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题. 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false. if (p.x < minX || p.x > maxX

判断一个点是否在多边形内

#转载自:http://blog.csdn.net/u011722133/article/details/52813374 在GIS(地理信息管理系统)/PCL(点云库)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之

点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部

判断一点是否在不规则图像的内部算法,如下图是由一个个点组成的不规则图像,判断某一点是否在不规则矩形内部,先上效果图 算法实现如下,算法简单,亲试有效 public class PositionAlgorithmHelper { /// <summary> /// 判断当前位置是否在不规则形状里面 /// </summary> /// <param name="nvert">不规则形状的定点数</param> /// <param n

判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)

判断一个窗口是否被挂起了(就是没有响应了),在多窗口编程了经常会用到,在给别的窗口发消息前,为了目的窗口能确定收到消息,常常在之前先检测窗口是否被挂起了,我们以前常用的方式的是使用下面的方法: [cpp] view plain copy // 判断一个窗口是否已经停止响应了(超时0.5秒) DWORD_PTR dwResult = 0; LRESULT lr = ::SendMessageTimeout(g_hWin, WM_NULL, 0, 0, SMTO_ABORTIFHUNG | SMTO

百度地图判断点是否在不规则多边形内部

在线查看 demo:https://pan.baidu.com/s/1jI7Ytuu 判断点是否在不规则多边形内部的判断逻辑: 1:在地图上绘制的图形必须是多边形,具体绘制可参考之前博文:http://www.cnblogs.com/mrzhu/p/7966311.html 2:矩形排除 取多边形分别在XY轴上的最大最小值,组成一个矩形,判断这个点是否在这个矩形内部,如果不在 则不需要继续向下判断 3:边线排除 判断点是否在多边形的某条边上,如果在 则不需要继续向下判断 4:以点到y轴的距离得到