функция, которую пользователь вводит координаты x,y и находит, находятся ли координаты внутри области заданного прямоугольника c

#c #function #geometry

Вопрос:

 #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", amp;a, amp;b);
    printf("Inform the coordinates of the superior right corner: n");
    scanf("%d %d", amp;c, amp;d);
    printf("=== points ===n");
    printf("inform the coordinates of the point (x,y)n");
    scanf("%d %d", amp;f, amp;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 amp;amp; x<v2x || y> v1y amp;amp; y<v2y)
    {
        return D;
    }

 

таким образом, в основном эта функция заключается в проверке того,находится ли точка внутри прямоугольника с нижним углом x, координатами y, равными v1x и v1y, и высшими координатами v2x и v2y, и в основной функции пользователь должен ввести координаты x и y, чтобы проверить, находятся ли они внутри него, я вроде новичка в C, но я уже потерял 1 день, пытаясь выяснить, что я сделал здесь не так, и, возможно, я слишком глуп, чтобы не видеть, что здесь происходит не так

Комментарии:

1. таким образом, функция проверяет, верно ли утверждение, и возвращает значение D основной функции, и если h == D символ, возвращаемый функцией, оператор if проверяет его и выводит точку внутри прямоугольника, извините, я бразилец, и я забыл перевести последнюю распечатку.

2. Что заставляет вас думать, что вы сделали что-то не так? Каковы симптомы? Что вы наблюдаете? Какого поведения вы хотите?

3. Кроме того, if(x>v1x amp;amp; x<v2x || y> v1y amp;amp; y<v2y) должно быть amp;amp; там, где у вас есть || , так как вы хотите, чтобы все условия были верными.

4. Похоже, вы не опубликовали весь код

5. @FaustinoDaSilva Не обновляйте вопрос с помощью «исправленного» кода… Если вы хотите, вы можете опубликовать свой исправленный код в качестве ответа, но не меняйте вопрос

Ответ №1:

В опубликованном коде есть некоторые проблемы, но основная проблема, по-видимому, возникает из-за некоторых основных недоразумений.

 // 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 ) { /* ... */ }
 

Если цель состоит в том, чтобы написать функцию, которая возвращает 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';    
}

 

Комментарии:

1. вау, последняя часть даже лучше, чем моя, вы на самом деле сократили строку кода, просто вернув то, что внутри

2. извините, это потому, что я здесь новичок и немного запутался, я не знаю, можете ли вы ответить на свой собственный вопрос

3. если ( h == D ) это было недоразумение с моей стороны, на самом деле код должен был возвращать то, что вы там ввели, например, если код, если h == ‘D’, будет говорить, что координата находится внутри прямоугольника, и так далее, я думал, что это должно было быть другое

4. я отметил вас как ответы, потому что вы сделали свою работу, чтобы понять, почему я боролся, и извлек из этого некоторый смысл, я уже решил свою собственную проблему, кстати, но вы тот, кто на самом деле был наиболее близок к решению этой проблемы.

Ответ №2:

Вы слишком много стараетесь в одной строке… это слишком сложно:

 if(x>v1x amp;amp; x<v2x || y> v1y amp;amp; y<v2y)
 

и это тоже неправильно. Это должно быть:

 if(x>v1x amp;amp; x<v2x amp;amp; y> v1y amp;amp; y<v2y)
 

Но избегайте подобных заявлений…

Упростите задачу, написав больше строк кода.

Но сначала обратите внимание, что подобная функция должна возвращать 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);
}
 

Комментарии:

1. да, но это противоречит моему первому вопросу, и вы повторяете, если много раз, мой вопрос касался способа возврата символа D, который я нашел в своем основном коде, а вторая строка была неправильной, потому что я отредактировал код, не зная об этом

2. я сказал, что это противоречит моему первому вопросу, потому что я не хочу возвращать целое число 1, я хочу вернуть символ D

3. @FaustinoDaSilva Итак, вы хотите вернуть персонажа D , когда точка находится внутри, верно? И какой персонаж вам нужен, когда он находится снаружи?

4. я хочу вернуть F