用户输入坐标 x,y 并查找坐标是否在给定矩形 c 的区域内的函数
function that the user inputs coordinates x,y and find if the coordinates are inside the area of an given rectangle c
#include <stdio.h>
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y);
int main()
{
int a, b, c, f,d,g,x,y;
char D, h;
printf("== Coordinates of a rectangle ==\n");
printf("Inform the coordinates of the left inferior corner : \n");
scanf("%d %d", &a, &b);
printf("Inform the coordinates of the superior right corner: \n");
scanf("%d %d", &c, &d);
printf("=== points ===\n");
printf("inform the coordinates of the point (x,y)\n");
scanf("%d %d", &f, &g);
h = dentroRetangulo(a,b,c,d,f,g);
if(h == D)
{
printf("O ponto(%d, %d) encontra-se dentro do retangulo", x, y);
}
return 0;
}
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
char D;
char B;
char F;
if(x>v1x && x<v2x || y> v1y && y<v2y)
{
return D;
}
所以基本上,这个函数是关于检查一个点是否在矩形内,矩形的下角 x、y 坐标为 v1x 和 v1y,上角坐标为 v2x 和 v2y,在主函数中用户应该输入 x 和 y 坐标来验证它们是否在其中,我有点像 C 语言的新手,但我已经花了一整天时间试图找出我在这里做错了什么,idk 也许我太愚蠢了看不到这里出了什么问题
你在一行中尝试了太多...这行太复杂了:
if(x>v1x && x<v2x || y> v1y && y<v2y)
也是错误的。应该是:
if(x>v1x && x<v2x && y> v1y && y<v2y)
但要避免这样的陈述...
通过编写更多代码行让事情变得简单。
但首先请注意,当点在外部时,像这样的函数应该 return 0
(又名 false),当它在内部时 1
(又名 true)。
为了简单起见,请执行以下操作:
int dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
if (x < v1x) return 0; // If the point is to the left, return 0
if (x > v2x) return 0; // If the point is to the rigth, return 0
if (y < v1y) return 0; // If the point is below, return 0
if (y > v2y) return 0; // If the point is above, return 0
return 1; // The point is inside, return 1
}
每行一个简单的检查可以使您的代码更加简单。
在 main
中这样称呼它
if(dentroRetangulo(a,b,c,d,f,g))
{
printf("O ponto(%d, %d) encontra-se dentro do retangulo", f, g);
}
发布的代码有一些问题,但主要问题似乎是由一些基本的误解引起的。
// The following will declare, but WON'T initialize two variables
// of type 'char'. Here, D, is the NAME of the variable, not its content,
// which is indeterminated.
char D, h;
// Here h is assigned the value returned by OP's function, which has the
// exact same issue noted before. Its value will still remain indeterminated.
h = /* ... */;
// Comparing two variables with indeterminated values has undefined behavior.
if ( h == D ) { /* ... */ }
如果打算编写一个函数,当点在矩形内时 returns char
值为 'D'
或 'F'
否则(可能 'B'
如果它在其中一个边缘上),以下可能是一种可能的实现方式。
typedef struct point_s
{
int x, y;
} Point;
char point_rectangle_intersection(Point bottom_left, Point top_right, Point p)
{
// Check if the point is outside.
if ( p.x < bottom_left.x || p.x > top_right.x ||
p.y < bottom_left.y || p.y > top_right.y )
return 'F';
// Check if the point is on one of the edges.
if ( p.x == bottom_left.x || p.x == top_right.x ||
p.y == bottom_left.y || p.y == top_right.y )
return 'B';
// The point is inside.
return 'D';
}
#include <stdio.h>
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y);
int main()
{
int a, b, c, f,d,g,x,y;
char D, h;
printf("== Coordinates of a rectangle ==\n");
printf("Inform the coordinates of the left inferior corner : \n");
scanf("%d %d", &a, &b);
printf("Inform the coordinates of the superior right corner: \n");
scanf("%d %d", &c, &d);
printf("=== points ===\n");
printf("inform the coordinates of the point (x,y)\n");
scanf("%d %d", &f, &g);
h = dentroRetangulo(a,b,c,d,f,g);
if(h == D)
{
printf("O ponto(%d, %d) encontra-se dentro do retangulo", x, y);
}
return 0;
}
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
char D;
char B;
char F;
if(x>v1x && x<v2x || y> v1y && y<v2y)
{
return D;
}
所以基本上,这个函数是关于检查一个点是否在矩形内,矩形的下角 x、y 坐标为 v1x 和 v1y,上角坐标为 v2x 和 v2y,在主函数中用户应该输入 x 和 y 坐标来验证它们是否在其中,我有点像 C 语言的新手,但我已经花了一整天时间试图找出我在这里做错了什么,idk 也许我太愚蠢了看不到这里出了什么问题
你在一行中尝试了太多...这行太复杂了:
if(x>v1x && x<v2x || y> v1y && y<v2y)
也是错误的。应该是:
if(x>v1x && x<v2x && y> v1y && y<v2y)
但要避免这样的陈述...
通过编写更多代码行让事情变得简单。
但首先请注意,当点在外部时,像这样的函数应该 return 0
(又名 false),当它在内部时 1
(又名 true)。
为了简单起见,请执行以下操作:
int dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
if (x < v1x) return 0; // If the point is to the left, return 0
if (x > v2x) return 0; // If the point is to the rigth, return 0
if (y < v1y) return 0; // If the point is below, return 0
if (y > v2y) return 0; // If the point is above, return 0
return 1; // The point is inside, return 1
}
每行一个简单的检查可以使您的代码更加简单。
在 main
中这样称呼它
if(dentroRetangulo(a,b,c,d,f,g))
{
printf("O ponto(%d, %d) encontra-se dentro do retangulo", f, g);
}
发布的代码有一些问题,但主要问题似乎是由一些基本的误解引起的。
// The following will declare, but WON'T initialize two variables
// of type 'char'. Here, D, is the NAME of the variable, not its content,
// which is indeterminated.
char D, h;
// Here h is assigned the value returned by OP's function, which has the
// exact same issue noted before. Its value will still remain indeterminated.
h = /* ... */;
// Comparing two variables with indeterminated values has undefined behavior.
if ( h == D ) { /* ... */ }
如果打算编写一个函数,当点在矩形内时 returns char
值为 'D'
或 'F'
否则(可能 'B'
如果它在其中一个边缘上),以下可能是一种可能的实现方式。
typedef struct point_s
{
int x, y;
} Point;
char point_rectangle_intersection(Point bottom_left, Point top_right, Point p)
{
// Check if the point is outside.
if ( p.x < bottom_left.x || p.x > top_right.x ||
p.y < bottom_left.y || p.y > top_right.y )
return 'F';
// Check if the point is on one of the edges.
if ( p.x == bottom_left.x || p.x == top_right.x ||
p.y == bottom_left.y || p.y == top_right.y )
return 'B';
// The point is inside.
return 'D';
}