点在哪

来源:互联网 发布:java中console 编辑:程序博客网 时间:2024/04/25 12:34

点在哪

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte

描述

给出一组图形(矩形或园)和一组点的数据,判断点的位置


输入

输入一组图形的数据,其中每行以“c”开头的表示园,以“r”开头的表示矩形,其中矩形是依次给出左下角和右上角的坐标,园是给出圆心坐标及半径,图形数据以输入另起一行的*结束,接下来是给出点的坐标(x,y),整个输入文件以9999.9 9999.9结束,每行中的各个数据间用一个空格分隔


输出

输出点的位置如下信息:直接输出到屏幕上,如某点在图形上,则输出所有图形上的信息:Point i is contained in figure j;如某点不在任一图形内输出Point i is not contained in any figure。


样例输入

r 0.0 0.0 5.5 10.3
c -5.0 -5.0 3.7
r 2.5 2.5 12.5 12.5
*
2.0 2.0
4.7 5.3
9999.9 9999.9

样例输出

Point 1 is contained in figure 1
Point 2 is contained in figure 1
Point 2 is contained in figure 3


   题目要求是判断所给的点是否在矩形或者圆内。判断点是否在矩形内,假设给出的矩形左下角的坐标和右上角的坐标分别为
(X1,Y1),(X2,Y2),只要判断所给点的横坐标 X 满足:X1 <= X <= X2 ,并且纵坐标满足:Y1 <= Y <= Y2,则可证明点在矩形内。判断点是否在圆内,假设所给圆心坐标为(X1,Y1),则只需判断点到圆心的距离小于半径,
即(X-X1)^2 + (Y-Y1)^2 <= R^2,则可证明点在圆内。


#include <stdio.h>#include <string.h>#include <math.h>#include <iostream>using namespace std;struct memory{    char z;    double a;    double b;    double c;    double d;    double x;    double y;    double r;}mem[1000];int main (){    double n[1000], m[1000];    int i = 1;    while(scanf("%c",&mem[i].z) && mem[i].z != '*') ///输入所有的图形坐标    {        if(mem[i].z == 'r')        {            scanf("%lf %lf %lf %lf",&mem[i].a, &mem[i].b, &mem[i].c, &mem[i].d);            i++;        }        if(mem[i].z == 'c')        {            scanf("%lf %lf %lf %lf",&mem[i].x,&mem[i].y,&mem[i].r);            i++;        }    }    int j = 1;    while(scanf("%lf %lf",&n[j],&m[j]) && n[j] != 9999.9 && m[j] != 9999.9) ///输入所给的点的坐标    {        j++;    }    for(int l = 1; l <= j - 1; l++) ///对每一个点进行判断是否存在属于所给图形的点    {        int h = 0;        for(int k = 1; k <= i - 1; k++) ///对每一个图形进行判断        {            if(mem[k].z == 'r') ///矩形判断            {                if((n[l] >= mem[k].a && n[l] <= mem[k].c) && (m[l] >= mem[k].b && m[l] <= mem[k].d))                {                    h++;                    printf("Point %d is contained in figure %d\n",l,k);                }            }            if(mem[k].z == 'c') ///圆形判断            {                double o;                o = sqrt((mem[k].x - n[l]) * (mem[k].x - n[l]) + (mem[k].y - m[l]) * (mem[k].y - m[l]));                if(o <= mem[k].r)                {                    h++;                    printf("Point %d is contained in figure %d\n",l,k);                }            }        }        if(h == 0)            printf("Point %d is not contained in any figure\n",l);    }    return 0;}


0 0
原创粉丝点击