• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Dentro de un rectángulo C++

Álvaro11

Nuevo
Registrado
28 Mar 2021
Mensajes
13
Puntos
1
Edad
21
Hola. Querría saber si pueden ayudarme a completar esta sencilla función en C.

Escribe el código de una función que devuelva 1 si el punto (px,py) está dentro del rectángulo cuya esquina superior izquierda esté en (x,y) y tenga w
puntos de ancho y h puntos de alto. En caso contario devuelve 0.

He pensado esto:
int dentro_rectangulo ( int x, int y, int w, int h, int px, int py) {
return x < px + w && x + w > px && y < py + h && py < y + h;

Pero no creo que esté bien. Cualquier ayuda la agradecería mucho :)
 
Hola. La idea es correcta, pero no he comprobado que las operaciones concretas lo sean.

Para comprobar que las operaciones concretas sean correctas, puedes dibujar un eje cartesiano en un papel (si es cuadriculado, mejor), dibujar dentro del eje un rectángulo y un punto fuera y otro dentro, y realizar tú mismo las operaciones con los datos reales del rectángulo y los puntos que hayas dibujado. Es sencillo y, como te digo, la idea es correcta 👍🏻 así que no estarás perdiendo el tiempo.

Recuerda que debes retornar un número, aunque si no recuerdo mal haciendo operaciones lógicas en C el resultado final se evaluaba como int.
 
Te faltaría el condicional si no me equivoco.

En pseudocódigo sería algo así:

Si "condición en x" && "condición en y" entonces return 1.
Else return 0.

La condición que impones para ver si está dentro del rectángulo creo que no está bien.
Yo la haría comparando siempre el punto a analizar, solamente por estructura. La forma más compacta que se me ocurre es:

Si px > x && px < x+w && py < y && py > y - h

Como el rectángulo te le dan por la esquina superior izquierda esto se leería como:

Si (el punto está a la derecha de la esquina superior izquierda) y a su vez (está a la izquierda de un punto desplazado "el ancho del rectángulo" hacia la derecha) y (si está por debajo de la esquina izquierda superior), (pero a la vez por encima de un punto alejado "la altura del rectángulo" hacia abajo.)
Esto junto a un entonces: devuélveme 1.
Si no... devuelveme 0.

Que sería la condición que se pide.

Si el borde del rectángulo quieres incluirlo seria usar "menor/mayor o igual qué" en vez de <>.
 
Última edición:
Arriba