|
|
||||||||||||||||
Кривая Безье07.05.2016, 17:10. Показов 21382. Ответов 20
Метки нет (Все метки)
Вооружился статейкой на википедии https://ru.wikipedia.org/wiki/... 1%8C%D0%B5 и использовал формулу, описаную там, в своей программе, и нифига не работает.
Вот функция факториала
0
|
||||||||||||||||
| 07.05.2016, 17:10 | |
|
Ответы с готовыми решениями:
20
Кривая Безье Кривая Безье по 4 точкам
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 07.05.2016, 17:34 | |
|
Так не подскажешь; здесь не все ясновидящие. Попробуйте значения x и y сохранять ещё и в StringList и по окончании цикла сохраните его в файл. Станет понятно, какие там величины фигурируют.
0
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|
| 07.05.2016, 17:47 | |
|
1
|
|
|
|
||||||
| 08.05.2016, 12:14 [ТС] | ||||||
|
nick42, да величины должны быть нормальные, так как я пробовал в лоб по полиному для 4-х точек и там все нормально рисуется. А вот с этой универсальной формулой с факториалами ничего не получается. К тому же все значения можно в отладчике посмотреть. Тут главный вопрос в том, что правильно ли я понял алгоритм
Добавлено через 3 минуты gunslinger, как ни странно, я не находил этих тем, несмотря на то, что даже в гугле вбивал запрос Добавлено через 17 часов 15 минут Не хотите вы думать. Попрыгал с бубном около часа и наконец выстроил такую последовательность команд, которая нужна. Ошибки были в главной функции, вот рабочая:
0
|
||||||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
||||||
| 08.05.2016, 23:09 | ||||||
|
Можно так сделать (немного переделал):
2
|
||||||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
||||||
| 09.05.2016, 21:54 | ||||||
Сообщение было отмечено BRcr как решение
Решение
Дополнительная "визуализация":
2
|
||||||
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 17:12 | |
|
Повторил ваш код. Всё прекрасно получилось. Спасибо.
Однако кривая Безье, если внимательно присмотреться, получается не ровной, создаётся эффект "смазанности", хотя в Автокаде, например, такое не наблюдается. У вас, если присмотреться, то же самое. Как можно это исправить?
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 18:39 | |
|
Решение проблемы найдено.
Пришлось немного изменить функцию TPoint bezier(UINT n, double t). Выполнял на Лазарусе, поэтому, если кому интересно, можете посмотреть код здесь: Как при построении кривой Безье уменьшить разброс точек?
1
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|
| 16.05.2017, 19:05 | |
|
Насколько помню, проблему решить не особо удалось.
Пробовал уменьшать шаг step, рисовать не линиями, а точками. Хотя, если увеличить рисунок, вроде немного плавнее получается. Вот пример общего случая (для которого кривые Безье являются частным случаем): В-сплайновые кривые Может нужен другой подход при рисовании (для лучшего сглаживания), хотя математически в самом построении кривых вроде все верно.
0
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|
| 16.05.2017, 19:46 | |
|
Долго я сообщение писал... Спасибо за решение.
Добавлено через 26 минут В принципе можно обойтись без итогового округления.
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 19:57 | |
|
А есть ли какой-нибудь математический аппарат, позволяющий разбить кривую Безье (или элипс) на кокие-то элементарные фигуры (линии, дуги и пр.)? Суть такая: надо взять Автокадовский DXF-файл и при помощи его управлять положением режущего инструмента станка, при этом как можно ближе к истине отображать на экране положение инструмента. Если отправить сразу координаты узловых точек той же линии Безье, то теряется возможность отслеживать положение инструмента, если отправлять из цикла for(double t = step; t <= 1; t += step)... и одновременно отрисовывать на экране, то слабым местом будет пропускная способность линии связи.
С окружностью и прямыми всё просто: разбивается фигура на отдельные дуги или линии (от 5 до 20 мм), приращения которых передеются в исполнительное устройство. А вот с кривой Безье не всё так просто...
0
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|
| 16.05.2017, 22:16 | |
|
Если я правильно понимаю, что требуется, то при (для) предварительной примерной оценки положения инструмента можно увеличить шаг step, и, если все устраивает, вернуть исходное значение шага и отрисовывать в "обычном" режиме.
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 22:58 | |
|
По идее всё почти так, но не совсем. Шаговые двигатели работают на скорости 20 000 микрошагов в секунду. Интерфейс связи со скоростью 19200 бит/сек. Поэтому, чтобы не останавливались двигатели (это создаст вибрацию) приходится использовать буфер упреждения, глубиной в несколько перемещений. Т.е. из буфера считываются координаты очередного перемещения, двигатели его отрабатывают, компьютер получает уведомление, отрисовывает на экране и отправляет очередные координаты в буфер. Каждая новая точка должна отличаться от предыдущей хотя бы на расстояние, на которое способны переместить двигатели режущий инструмент за время сеанса связи. Вот отсюда, собственно, и вопрос.
Нашёл учебник: Роджерс "Математические основы машинной графики" 2001 г, раздел 5-12 "Разбиение В-сплайнов", но, вероятно, поспешил, т.к. в DXF-файле очень интересная кодировка сплайнов (SPLINE). Нарисовал в AutoCAD-е, Вложение 833391 а у себя получил Вложение 833392 (имею ввиду не симметрию по Y, это из-за разных точек начала отсчёта, а несоответствие формы).
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 23:01 | |
|
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
|
| 16.05.2017, 23:51 | |
|
Нашёл интересную статью на тему кривых Безье: Кривые Безье для ваших игр.rar
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 16.05.2017, 23:52 | ||
|
1
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 16.05.2017, 23:55 | |
|
в этом случае вместо дуг передавать линии линии
0
|
|
|
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
|
||
| 17.05.2017, 00:52 | ||
|
Спасибо. Очень понравилась ваша идея.
В последней задаче у меня были прямые и окружности. Их я разбивал на отрезки, координаты очередной точки, куда должен "приехать" рабочий инструмент (а в случае дуги - центр и угол сектора) передавал в станок. В станке использовал ARM-контроллер, который преобразовывал координаты в шаги методом Брезенхема (в случае наклонных и дуг), ну и по мере ответов станка отрисовывал их на экране. Не по теме. Лет 10 назад увидил рекламу "буржуйского станка": кладут на станину приклад от охотничьего ружъя. Он его просканировал. Затем кладут заготовку, из которой он повторил копию. Вот, в принципе, в чём вся идея. Просканировать, правда, пока ещё не могу, поэтому первоначально использовал CorelDraw и PLT-формат, теперь хочу освоить DXF, а затем, если получится, то и сканирование. Сложности, правда, не в программировании и электронике, а в "доставании железяк" для станка. Добавлено через 18 минут
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 17.05.2017, 01:53 | ||
|
Кое-что в тему - http://dxdy.ru/topic8371.html По аппроксимации (для случая когда "для кучи точек выбираем максимально близко через них проходящую окружность") - http://prografix.narod.ru/rus_cirap.html, можно например для контроля точности разбиения применить. И то, что разбиение с автоматически подбирающимся шагом до нас уже делали - http://www.caduser.ru/forum/in... &TID=29238 Добавлено через 9 минут Да, и в точке "носа" будет меняться направления обхода окружности (с "по часовой" на "против часовой"). Уже и подзабыл, как это в G-кодах...
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 17.05.2017, 03:25 | |
|
Подумал-подумал, и нашёл ошибку. В общем случае через такие 2 пары точек можно построить только дугу + прямую. Зато считать, наверно, проще - радиус берётся как расстояние от пересечения касательных до ближайшей точки, помноженное на котангенс половины угла между касательными.
0
|
|
| 17.05.2017, 03:25 | |
|
Помогаю со студенческими работами здесь
20
кривой Безье Кривая в C++ Builder Кривая Эрмита Кривая сортировка пузырьком StringGrid
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|