Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Visual Studio 2012

Нажимаем на кнопку "Нарисовать", и по данным точкам будет построена функция с помощью полинома Лагранжа.

Код программы: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Newton_Interpolate
{
    public partial class Form1 : Form
    {
 
        public struct point //Структура точки
        {
            public float X, Y; //Машинные координаты
            public float x, y; //Реальные координаты
        }
 
 
        //Координаты исходных точек. Значение x и y должны быть по модулю не больше 30.
        public float[,] Pts = { { -27f, 24.5f }, 
                                 { -22f, 12.8f }, 
                                 { -18.4f, 10.2f }, 
                                 { 8.6f, -4f },
                                 { 0f, -4.5f},
                                 {4f, 2.8f},
                                 {14.2f, 12.6f},
                                 {17f, 24.5f},
                                 {21f, 26f}
                               };
 
        public point[] Points = new point[100]; //Массив точек
        public Font drawFont = new Font("Arial", 8); //Стиль шрифта и его размер, для отрисовки координат точек на плоскости
        public int xc=300, yc=300; //Координаты центра координатных осей
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        //Отрисовка плоскости, с точками и координатными осями
        public void drawPlain()
        {
            Graphics g = Graphics.FromHwnd(picturebox1.Handle); 
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
            g.Clear(Color.White);
            Pen Axis = new Pen(Color.Black, 1);
 
            g.DrawLine(Axis, 0, 300, 600, 300);
            g.DrawLine(Axis, 300, 0, 300, 600);
 
            for (int i = 0; i <= 600; i += 10)
            {
                g.DrawLine(Axis, i, 298, i, 302);
                g.DrawLine(Axis, 298, i, 302, i);
            }
 
            for (int i = 0; i < (Pts.Length / 2); i++)
            {
                Points[i].x = Pts[i, 0];
                Points[i].y = Pts[i, 1];
                Points[i].X = xc + Points[i].x * 10;
                Points[i].Y = yc - Points[i].y * 10;
            }
 
            DrawPoints();//Отрисовка точек
        }
 
        public int ChangeCoordinates(float a, int isY) //Перевод координат из реальных в машинные
        {
            if (isY == 1) return (int)(yc - a * 10);
            return (int)(xc + a * 10);
        }
 
        //Высчитывание полинома Лагранжа в заданном отрезка, с заданными точками.
        public float Lagrange(float x)
        {
            float res = 0f, s = 0f, s1 = 1f, s2 = 1f;
 
            for (int i = 0; i < (Pts.Length / 2); i++)
            {
                s1 = 1f; s2 = 1f;
                for (int j = 0; j < (Pts.Length / 2); j++)
                {
                    if (i != j)
                    {
                        s1 = s1 * (x - Points[j].x);
                        s2 = s2 * (Points[i].x - Points[j].x);
                    }
                }
                s = Points[i].y * (s1 / s2);
                res = res + s;
 
            }
 
            return res;
        }
 
 
        //Отрисовка точек и их координат на плоскости
        public void DrawPoints()
        {
            Graphics g = Graphics.FromHwnd(picturebox1.Handle);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
            SolidBrush pointBrush = new SolidBrush(Color.Red);
            SolidBrush drawPointBrush = new SolidBrush(Color.Black);
 
            for (int i = 0; i < (Pts.Length / 2); i++)
            {
                g.FillEllipse(pointBrush, Points[i].X-2, Points[i].Y-2, 4, 4);
                String drawString = "[" + Points[i].x + "; " + Points[i].y + "]";
                PointF drawPoint = new PointF(Points[i].X, Points[i].Y);
                g.DrawString(drawString, drawFont, drawPointBrush, drawPoint);
            }
        }
 
 
        //Отрисовка интерполированной функции по нажатию на кнопку "Нарисовать"
        private void Draw_Button_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromHwnd(picturebox1.Handle);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
            SolidBrush drawLineNewton = new SolidBrush(Color.Blue);
 
            drawPlain();
 
            for (float i = -30.0f; i <= 30.0f; i += 0.0005f)
            {
                g.FillRectangle(drawLineNewton, ChangeCoordinates(i, 0), ChangeCoordinates(Lagrange(i), 1), 1, 1);
            }
 
        }
 
    }
}

Прикрепленный файлРазмер
Lagrange.rar85.39 кб