XY平面中点的计算

时间:2018-11-27 13:05:04

标签: c double

#include <stdio.h>

int main(double x, double y, double x1, double y1, double x2, double y2)
{
    // First corner (botton left) of the rectangle
    printf("Choose x and y for the first corner that the rectangle should start:\n");
    scanf("%lf%lf", &x1, &y1);

    // Opposite corner(top right) that should make the rectangle possible 
    printf("Choose x and y for the first corner that the rectangle should end:\n");
    scanf("%lf%lf", &x2, &y2);

    // The position of the point that should be checked
    printf("Choose the x and y that should be checked:\n");
    scanf("%lf%lf", &x, &y);
    if (x1 < x < x2 && y1 < y < y2)
    {
        return 5;
    }
    else if (x1 == x && x == x2 && y1 == y && y == y2)
    {
        return 3;
    }
    else
    {
        return 0;
    }

    system("pause");

}

我的计算有一个小问题。

我试图让程序告诉我一点是否在矩形内部,边缘还是外部,但是即使不在矩形内部,我也总是得到5的结果。

此外,我不确定是否要在某处提到“ double x,double y,...”,还是只写得像scanf那样写?

2 个答案:

答案 0 :(得分:0)

您应该尝试替换此测试

if (x1 < x < x2 && y1 < y < y2)

使用

if (x1 < x && x < x2 && y1 < y && y < y2)

关于第二项测试,除非x1 = x2和y1 = y2,即矩形实际上是一个点,否则它永远不会成立。替换为

else if ( (x1 == x || x == x2) && (y1 == y || y == y2))

答案 1 :(得分:0)

各种问题


  • @StephaneM所示,x1 < x < x2不正确。

    // if (x1 < x < x2 && y1 < y < y2)
    if (x1 < x && x < x2 && y1 < y && y < y2)
    

x1 < x < x2测试x1 < x是否为0或1。然后测试0_or_1 < x2。不是OP所需要的。


  • 不正常且肯定不正确的main()函数签名

在函数头之后定义double变量。

// int main(double x, double y, double x1, double y1, double x2, double y2) {
int main(void) {
  double x, y, x1, y1, x2, y2;

  • “边缘”测试不正确

x1 == x && x == x2 && y1 == y && y == y2仅在矩形和点都是单个点时为真。

相反,请利用该点不在内部的优势。

if (x1 < x && x < x2 && y1 < y && y < y2) {
    return 5; // inside
} else if (x1 <= x && x <= x2 && y1 <= y && y <= y2) {  // include = in each compare
    return 3; // on edge
} else {
    return 0; // outside
}

代码也可能要交换x1,x2 x2 < x1。与y1,y2相同。