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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

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

Задача: Построить кривую Безье по методу "Де Кастельжо"
Построение производится по нажатию кнопки Draw

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

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Graphics G; // Объект графики
        PointF[] Arr = new PointF[] // Исходный массив точек
        {
            new PointF(10,150),
            new PointF(5,50),
            new PointF(150,50),
            new PointF(140,140),
            new PointF(150,50),
            new PointF(150,50),
            new PointF(150,50),
 
        };
        int Fuctorial(int n) // Функция вычисления факториала
        {
            int res = 1;
            for (int i = 1; i <= n; i++)
                res *= i;
            return res;
        }
        float polinom (int i, int n, float t)// Функция вычисления полинома Бернштейна
            {
            return (Fuctorial(n)/(Fuctorial(i) * Fuctorial(n - i)))* (float)Math.Pow(t, i) * (float)Math.Pow(1 - t, n - i);
            }
        void Draw()// Функция рисования кривой
        {
            int j = 0;
            float step = 0.01f;// Возьмем шаг 0.01 для большей точности
 
            PointF[] result = new PointF[101];//Конечный массив точек кривой
            for (float t = 0; t < 1; t += step)
            {
                float ytmp = 0;
                float xtmp = 0;
                for (int i = 0; i < Arr.Length; i++)
                { // проходим по каждой точке
                    float b = polinom(i, Arr.Length - 1, t); // вычисляем наш полином Бернштейна
                    xtmp += Arr[i].X * b; // записываем и прибавляем результат
                    ytmp += Arr[i].Y * b;
                }
                result[j] = new PointF(xtmp, ytmp);
                j++;
 
            }
            G.DrawLines(new Pen(Color.Red), result);// Рисуем полученную кривую Безье
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            G = Graphics.FromHwnd(pictureBox1.Handle);
            G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            Draw();
        }
    }
}

Прикрепленный файлРазмер
Pavlova_Bezie.zip42.38 кб

Комментарии

Somni аватар
Опубликовано Somni в 21. Апрель 2018 - 18:32.

Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки.
Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в степень i. Теперь всё отлично работает. Спасибо огромное!
Пишу с использованием мультимедийной библиотеки SFML.