Расчёт пересечения прямой, луча и отрезка с канонической квадратичной кривой - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы