Форум программистов, компьютерный форум CyberForum.ru

Задачка про кривые Безье - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа со структурами http://www.cyberforum.ru/cpp-beginners/thread797121.html
Здравствуйте.У меня возникли проблемы в написании программы,а именно как удалить структуру,поиск в массиве по ключевому полю.Прошу вас помогите. #include<iostream.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct WORKER {char familiya; char name; char otchestvo;
C++ Компонента связности в графе Нужна помощь с задачей, где нужно использовать графы. Смысл ее сводится к тому, чтобы узнать, какое минимальное количество ребер нужно вставить в граф, чтобы он стал связным (какое минимальное количество дорог нужно почистить, чтобы можно было добраться из любого города в любой другой). Если я не ошибаюсь, чтобы получить результат нужно найти количество компонент связности, и из этого числа... http://www.cyberforum.ru/cpp-beginners/thread797119.html
Программа для игры в покер C++
Никак не могу понять суть ооп. До прихода в с++ програмировал на С микроконтроллеры. Там всё просто. Есть начало программы, и пишеш инструкции последовательно чтоб устройство работало так, как задумано. Используя регистры, прерывания и тп. Сейчас же выучив немного С++ пытаюсь написать консольное приложение для игры в покер сам с собой. Написал функцию сравнения рук в покере. Даже написал...
C++ Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
Задана целочисленная квадратная матрица A(N x N). Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
C++ Задача про Лестницу http://www.cyberforum.ru/cpp-beginners/thread797095.html
Условия формулируются так: Есть лестница высотой в n ступенек (плюс «нулевая» - площадка, где мы стоим вначале). На каждой ступеньке написано число (положительное или отрицательное). На стартовой площадке и на последней ступеньке - нули. Можно ступать либо на следующую ступеньку либо перескакивать через одну. Напишите алгоритм, определяющий, как надо шагать, чтобы сумма чисел на пройденных...
C++ Где графику делать? Всем доброго времени суток! Собственно вопрос в следующем. Курсовая работа по программированию - разработать приложение для игры в Рассаду. головоломка такая. надо сделать с графическим интерфейсом, чтобы "и мышкой можно было поиграться и чтоб красиво было." Тоесть рисование черточками ему не подходит. Сам я пишу в visual studio 10 и после гуглинья ниче внятного про графику в консоли в вс10 я... подробнее

Показать сообщение отдельно
free334
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 9
28.02.2013, 13:37     Задачка про кривые Безье
Нужны советы (скорее алгоритмические) по одной задаче.
Даны опорные точки кривой Безье, начальный и конечный параметры t0 и t1(0<t<1), а также значение ширины. Требуется "залить полосу" данной ширины вдоль кривой Безье, начиная с (x(t0),y(t0)) до (x(t1),y(t1)) причем желательно быстро.
Важно то, что ширину нужно откладывать вдоль перпендикуляра к кривой в данной точке.
Пробовал два подхода. Первый - это строить перпендикуляры в каждой точке, считать точку конца отрезка, прорисовывать линию. Второй - это строить круги в каждой точке с диаметром равным ширине.
Первый способ быстрее, но остаются пробелы между линиями. Недостаток второго способа это то, что почти каждая точка закрашивается несколько раз. К тому же почему-то идет расхождения между решениями(рисунок во вложении).
Красное - результат решения с кругами, черное-с перпендикулярами, зеленое - кривая Безье, построенная стандартными средствами C++(GDI+).
Вот содержательная часть кода.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (double t = start; t < finish+STEP; t += STEP) {
        if (t > 1) {
            t = 1;
        }               
        for (int i = 0; i < 4; i++) {
            double b = getBezierBasis(i, 3, t);
            double k=getDBasis(i,3,t);
            res[ind].X += (int)floor(p[i].X * b);
            res[ind].Y += (int)floor(p[i].Y * b);
            res2[ind].X += (int)floor(p[i].X * k);
            res2[ind].Y += (int)floor(p[i].Y * k);
        }
        double tg=1/res2[ind].Y;
        double dy=l*sqrt(tg*tg+1);
        double dx=(dy*tg);
        pen.SetColor(Color(0,0,0));
        graphics.DrawLine(&pen,res[ind].X,res[ind].Y,res[ind].X+dx,res[ind].Y+dy);
        stat = graphics.FillEllipse(&solidBrush,res[ind].X,res[ind].Y,l*5,l*5);
        ind++;
        pen.SetColor(Color(0,255,0));
        graphics.DrawBezier(&pen,p[0],p[1],p[2],p[3]);
    }
Может кто-нибудь делал что-нибудь подобное? Есть ли еще какие-либо решения этой задачи? Подозреваю, что как-то можно использовать афинную инвариантность кривой Безье.
Миниатюры
Задачка про кривые Безье  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru