Расчёт пересечения прямой, луча и отрезка с канонической квадратичной кривой - C#
Формулировка задачи:
Уважаемые знатоки и гости "программы" ) ...прошу помочь хоть как нибудь, дайте примеры или код с любыми кординатами
требуется сделать 3 кода:
1. Расчёт пересечения прямой, луча и отрезка с канонической квадратичной кривой.
2. Построение циклических интерполяционных полиномиальных кривых
3. Построение тени отрезка на отрезок от дальнего источника.
Среда желательно Visual Studio 2013 - 2015
Решение задачи: «Расчёт пересечения прямой, луча и отрезка с канонической квадратичной кривой»
textual
Листинг программы
#include "stdio.h" #include "conio.h" #include "graphics.h" #include "dos.h" #define GD_DIR "C:\\BC31\\BGI" // Директория egavga.bgi #define AMOUNT 30 // Максимальное количество узловых точек // Вычисление ординаты точки методом интерполяционного полинома Лагранжа int CalcLagrange(double x, double *X, double *Y,int pts) { double y=0, lj; for(int j=0;j<pts;j++) { lj=1; for(int i=0;i<pts;i++) if(i!=j) lj*=(x-X[i])/(X[j]-X[i]); y+=Y[j]*lj; } return y; } // Процедура рисования кривой void DrawCurve(double *X, double *Y, int pts) { for(double x=X[0];x<X[pts-1];x+=0.1) putpixel(x,CalcLagrange(x,X,Y,pts),LIGHTGREEN); } // Показать/спрятать курсор мыши void MouseShow(int s, struct REGPACK reg) { if(s==0) { reg.r_ax=0x02; intr(0x33,®); } else { reg.r_ax=0x01; intr(0x33,®); } } int main() { struct REGPACK reg; int GD,GM; int pts=0, // Количество поставленных точек put=0, // Ограничитель mp; // Номер передвигаемой точки double X[AMOUNT],Y[AMOUNT]; // Массивы X и Y координат точек GD=DETECT; reg.r_ax=0x00; intr(0x33,®); if(reg.r_ax!=0) { initgraph(&GD,&GM,GD_DIR); MouseShow(1,reg); reg.r_bx=1; // Необходимо для первого прохода цикла // Расстановка узловых точек, переход к черчению кривой по нажатию правой кнопки мыши while(reg.r_bx!=2) { reg.r_ax=0x03; intr(0x33,®); if(reg.r_bx==1) { if(put==0) // Следующий блок выполняется один раз за одно нажатие левой кнопки мыши { // Поставить узел, записать его координаты MouseShow(0,reg); circle(reg.r_cx,reg.r_dx,2); MouseShow(1,reg); X[pts]=reg.r_cx; Y[pts]=reg.r_dx; pts++; put=1; } } else put=0; } DrawCurve(X,Y,pts); // Изменение кривой путём изменения положения узловых точек while(!kbhit()) { reg.r_ax=0x03; intr(0x33,®); if(reg.r_bx==1) { if(put==0&&mp==256) //Нажата левая кнопка, и узловая точка ещё не выбрана { // Если курсор указывает на узловую точку, то определить её номер put=1; for(int l=0;l<pts;l++) if((X[l]+9>reg.r_cx)&&(X[l]-9<reg.r_cx) &&(Y[l]+9>reg.r_dx)&&(Y[l]-9<reg.r_dx)) mp=l; } if(mp!=256) // Перетаскивание выбранной точки { MouseShow(0,reg); X[mp]=reg.r_cx; Y[mp]=reg.r_dx-4; cleardevice(); DrawCurve(X,Y,pts); for(int j=0;j<pts;j++) circle(X[j],Y[j],2); MouseShow(1,reg); delay(10); } } else { mp=256; // Узловая точка не выбрана put=0; } } } else printf("Mouse is not installed."); getch(); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д