Алгоритм отсечения точек в компьютерной графике
Отсечение: в компьютерной графике наш экран действует как двумерная система координат. не обязательно, чтобы каждая точка была видна на нашей панели просмотра (то есть на экране нашего компьютера). Мы можем просматривать точки, которые лежат в определенном диапазоне (0,0) и (Xmax, Ymax). Итак, отсечение - это процедура, которая идентифицирует те части изображения, которые находятся либо внутри, либо за пределами нашей области просмотра.
В случае отсечения точек мы показываем / печатаем только те точки в нашем окне, которые находятся в диапазоне нашей области просмотра, другие точки, которые находятся за пределами диапазона, отбрасываются.
Пример
Вход : Выход :
Алгоритм отсечения точки:
- Получите минимальные и максимальные координаты обеих панелей просмотра.
- Получите координаты точки.
- Проверьте, находится ли данный ввод между минимальной и максимальной координатой области просмотра.
- Если да, отобразите точку, которая находится внутри области, в противном случае отбросьте ее.
Recommended: Please try your approach on {IDE} first, before moving on to the solution.
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<< "
" << 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:
" ); 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 ( "
Point outside the viewing pane:
" ); 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:
" ); 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 ( "
Point outside the viewing pane:
" ); 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 poclipping Algorithm # Function for poclipping 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 ( "
Point 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:
" ); 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( "
Point outside the viewing pane:
" ); 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 |
Выход:
Наведите курсор на панель просмотра: [10, 10] [100, 40] Точка за пределами области просмотра: [-10, 10] [400, 100] [100, 400] [400, 400] [400, 400]
Связанный пост:
Обрезка линии | Набор 1 (алгоритм Коэна – Сазерленда)
Обрезка многоугольника | Алгоритм Сазерленда – Ходжмана
Автор статьи - Шивам Прадхан (anuj_charm) . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью на сайте deposit.geeksforgeeks.org или отправить свою статью по электронной почте: grant@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.