Recorte: en los gráficos por computadora, nuestra pantalla actúa como un sistema de coordenadas 2-D. no es necesario que todos y cada uno de los puntos se puedan ver en nuestro panel de visualización (es decir, la pantalla de nuestra computadora). Podemos ver puntos, que se encuentran en un rango particular (0,0) y (Xmax, Ymax). Por lo tanto, el recorte es un procedimiento que identifica aquellas partes de una imagen que están dentro o fuera de nuestro panel de visualización.
En caso de recorte de puntos, solo mostramos/imprimimos puntos en nuestra ventana que están dentro del rango de nuestro panel de visualización, otros puntos que están fuera del rango se descartan.
Ejemplo
Input : Output :
Algoritmo de recorte de puntos:
- Obtenga las coordenadas mínimas y máximas de ambos paneles de visualización.
- Obtener las coordenadas de un punto.
- Compruebe si la entrada dada se encuentra entre la coordenada mínima y máxima del panel de visualización.
- En caso afirmativo, muestre el punto que se encuentra dentro de la región; de lo contrario, descártelo.
C++
// C++ program for point clipping Algorithm #include <bits/stdc++.h> using namespace std; // Function for point clipping void pointClip(int XY[][2], int n, int Xmin, int Ymin, int Xmax, int Ymax) { /*************** Code for graphics view // initialize graphics mode detectgraph(&gm,&gr); initgraph(&gm,&gr,"d:\\tc\\BGI"); for (int i=0; i<n; i++) { if ( (XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ( (XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) putpixel(XY[i][0],XY[i][1],3); } } **********************/ /**** Arithmetic view ****/ cout << "Point inside the viewing pane:" << endl; for (int i = 0; i < n; i++) { if ((XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ((XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) cout <<"[" << XY[i][0] <<","<<XY[i][1]<<"] "; } } // print point coordinate outside viewing pane cout<<"\n"<< endl; cout << "Point outside the viewing pane:"<<endl; for (int i = 0; i < n; i++) { if ((XY[i][0] < Xmin) || (XY[i][0] > Xmax)) cout << "[" << XY[i][0] << "," << XY[i][1] << "] "; if ((XY[i][1] < Ymin) || (XY[i][1] > Ymax)) cout << "[" << XY[i][0] << "," << XY[i][1] << "] "; } } // Driver code int main() { int XY[6][2] = {{10, 10}, {-10, 10}, {400, 100}, {100, 400}, {400, 400}, {100, 40}}; // getmaxx() & getmaxy() will return Xmax, Ymax // value if graphics.h is included int Xmin = 0; int Xmax = 350; int Ymin = 0; int Ymax = 350; pointClip(XY, 6, Xmin, Ymin, Xmax, Ymax); return 0; } // This code is contributed by SHUBHAMSINGH10
C
// C program for point clipping Algorithm #include<stdio.h> //#include<graphics.h> // Function for point clipping void pointClip(int XY[][2], int n, int Xmin, int Ymin, int Xmax, int Ymax) { /*************** Code for graphics view // initialize graphics mode detectgraph(&gm,&gr); initgraph(&gm,&gr,"d:\\tc\\BGI"); for (int i=0; i<n; i++) { if ( (XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ( (XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) putpixel(XY[i][0],XY[i][1],3); } } **********************/ /**** Arithmetic view ****/ printf ("Point inside the viewing pane:\n"); for (int i=0; i<n; i++) { if ((XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ((XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) printf ("[%d, %d] ", XY[i][0], XY[i][1]); } } // print point coordinate outside viewing pane printf ("\nPoint outside the viewing pane:\n"); for (int i=0; i<n; i++) { if ((XY[i][0] < Xmin) || (XY[i][0] > Xmax)) printf ("[%d, %d] ", XY[i][0], XY[i][1]); if ((XY[i][1] < Ymin) || (XY[i][1] > Ymax)) printf ("[%d, %d] ", XY[i][0], XY[i][1]); } } // Driver code int main() { int XY[6][2] = {{10,10}, {-10,10}, {400,100}, {100,400}, {400,400}, {100,40}}; // getmaxx() & getmaxy() will return Xmax, Ymax // value if graphics.h is included int Xmin = 0; int Xmax = 350; int Ymin = 0; int Ymax = 350; pointClip(XY, 6, Xmin, Ymin, Xmax, Ymax); return 0; }
Java
// Java program for point clipping Algorithm class GFG { // Function for point clipping static void pointClip(int XY[][], int n, int Xmin, int Ymin, int Xmax, int Ymax) { /*************** Code for graphics view // initialize graphics mode detectgraph(&gm,&gr); initgraph(&gm,&gr,"d:\\tc\\BGI"); for (int i=0; i<n; i++) { if ( (XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ( (XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) putpixel(XY[i][0],XY[i][1],3); } } **********************/ /**** Arithmetic view ****/ System.out.printf ("Point inside the viewing pane:\n"); for (int i = 0; i < n; i++) { if ((XY[i][0] >= Xmin) && (XY[i][0] <= Xmax)) { if ((XY[i][1] >= Ymin) && (XY[i][1] <= Ymax)) System.out.printf ("[%d, %d] ", XY[i][0], XY[i][1]); } } // print point coordinate outside viewing pane System.out.printf ("\nPoint outside the viewing pane:\n"); for (int i=0; i<n; i++) { if ((XY[i][0] < Xmin) || (XY[i][0] > Xmax)) System.out.printf ("[%d, %d] ", XY[i][0], XY[i][1]); if ((XY[i][1] < Ymin) || (XY[i][1] > Ymax)) System.out.printf ("[%d, %d] ", XY[i][0], XY[i][1]); } } // Driver code public static void main(String[] args) { int XY[][] = {{10,10}, {-10,10}, {400,100}, {100,400}, {400,400}, {100,40}}; // getmaxx() & getmaxy() will return Xmax, Ymax // value if graphics.h is included int Xmin = 0; int Xmax = 350; int Ymin = 0; int Ymax = 350; pointClip(XY, 6, Xmin, Ymin, Xmax, Ymax); } } /* This code contributed by PrinciRaj1992 */
Python3
# Python3 program for point clipping Algorithm # Function for point clipping def pointClip(XY, n, Xmin, Ymin, Xmax, Ymax): """************** Code for graphics view # initialize graphics mode detectgraph(&gm, &gr) initgraph(&gm, &gr, "d:\\tc\\BGI") for (i=0 i<n i++) if ((XY[i][0] >= Xmin) and (XY[i][0] <= Xmax)) if ((XY[i][1] >= Ymin) and (XY[i][1] <= Ymax)) putpixel(XY[i][0], XY[i][1], 3) *********************""" """*** Arithmetic view ***""" print("Point inside the viewing pane:") for i in range(n): if ((XY[i][0] >= Xmin) and (XY[i][0] <= Xmax)): if ((XY[i][1] >= Ymin) and (XY[i][1] <= Ymax)): print("[", XY[i][0], ", ", XY[i][1], "]", sep = "", end = " ") # prpocoordinate outside viewing pane print("\n\nPoint outside the viewing pane:") for i in range(n): if ((XY[i][0] < Xmin) or (XY[i][0] > Xmax)) : print("[", XY[i][0], ", ", XY[i][1], "]", sep = "", end = " ") if ((XY[i][1] < Ymin) or (XY[i][1] > Ymax)) : print("[", XY[i][0], ", ", XY[i][1], "]", sep = "", end = " ") # Driver Code if __name__ == '__main__': XY = [[10, 10], [-10, 10], [400, 100], [100, 400], [400, 400], [100, 40]] # getmaxx() & getmaxy() will return Xmax, # Ymax value if graphics.h is included Xmin = 0 Xmax = 350 Ymin = 0 Ymax = 350 pointClip(XY, 6, Xmin, Ymin, Xmax, Ymax) # This code is contributed by # SHUBHAMSINGH10
C#
// C# program for point clipping Algorithm using System; class GFG { // Function for point clipping static void pointClip(int [,]XY, int n, int Xmin, int Ymin, int Xmax, int Ymax) { /*************** Code for graphics view // initialize graphics mode detectgraph(&gm,&gr); initgraph(&gm,&gr,"d:\\tc\\BGI"); for (int i=0; i<n; i++) { if ( (XY[i,0] >= Xmin) && (XY[i,0] <= Xmax)) { if ( (XY[i,1] >= Ymin) && (XY[i,1] <= Ymax)) putpixel(XY[i,0],XY[i,1],3); } } **********************/ /**** Arithmetic view ****/ Console.Write("Point inside the viewing pane:\n"); for (int i = 0; i < n; i++) { if ((XY[i, 0] >= Xmin) && (XY[i, 0] <= Xmax)) { if ((XY[i, 1] >= Ymin) && (XY[i, 1] <= Ymax)) Console.Write("[{0}, {1}] ", XY[i, 0], XY[i, 1]); } } // print point coordinate outside viewing pane Console.Write("\nPoint outside the viewing pane:\n"); for (int i = 0; i < n; i++) { if ((XY[i, 0] < Xmin) || (XY[i, 0] > Xmax)) Console.Write("[{0}, {1}] ", XY[i, 0], XY[i, 1]); if ((XY[i, 1] < Ymin) || (XY[i, 1] > Ymax)) Console.Write("[{0}, {1}] ", XY[i, 0], XY[i, 1]); } } // Driver code public static void Main(String[] args) { int [,]XY = {{10, 10}, {-10, 10}, {400, 100}, {100, 400}, {400, 400}, {100, 40}}; // getmaxx() & getmaxy() will return Xmax, Ymax // value if graphics.h is included int Xmin = 0; int Xmax = 350; int Ymin = 0; int Ymax = 350; pointClip(XY, 6, Xmin, Ymin, Xmax, Ymax); } } // This code contributed by Rajput-Ji
Producción:
Point inside the viewing pane: [10, 10] [100, 40] Point outside the viewing pane: [-10, 10] [400, 100] [100, 400] [400, 400] [400, 400]
Complejidad de tiempo: O(N)
Espacio auxiliar: O(1)
Publicación relacionada:
Recorte de línea | Conjunto 1 (algoritmo de Cohen-Sutherland)
Recorte de polígonos | Algoritmo de Sutherland-Hodgman
Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA