Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

Кто знает как нарисовать кривые Безье?   Найти похожие ветки 

 
WondeRu ©   (2004-06-17 15:01) [0]

Здрасте!
Кто знает как нарисовать кривые Безье только с использованием линий, не прибегая к дополнительным вычислителям?
А поконкретнее в комнате "Медиа"!
Заранее спасибо!


 
MBo ©   (2004-06-17 15:10) [1]

средствами GDI (PolyBezier) это рисование будет, наверно, все же быстрее, чем самому вручную.

P(t)=P0*(1-t)^3+3*P1*(1-t)^2*t+3*P2*(1-t)*t^2+P3*t^3
где t - параметр, P0 и P3 - начальная и конечная точки, P1,P2 - контрольные, P - точка на кривой при параметре t. При рисовании отрезками кривая делится пополам при t=0.5 на две кривых, каждая из которых проверяется на близость к прямой - по расстоянию от центра кривой до отрезка P0i-P3i. Процесс продолжается рекурсивно.


 
AlexG ©   (2004-06-17 15:10) [2]

Либо рисуй КРИВЫ, либо выгони Е...


 
WondeRu ©   (2004-06-17 15:19) [3]

2MBo ©   (17.06.04 15:10) [1]
а нету ли уже реализованного алгоритма, хоть на С++?
Здесь пример для 4 контрольных точек, а как быть если их у меня по 10-24 на каждую линию?


 
MBo ©   (2004-06-17 15:31) [4]

>если их у меня по 10-24 на каждую линию?
Это у тебя одна кривая высокой степени или набор (кубических) кривых (как в PolyBezier)?


 
MBo ©   (2004-06-17 15:33) [5]

Да, глянул в Media - еще вопрос возник - это у тебя все-таки кривые Безье или NURBS (non-uniform rational B-splines)?


 
WondeRu ©   (2004-06-17 15:38) [6]

>Это у тебя одна кривая высокой степени или набор (кубических) кривых (как в PolyBezier)?

Это одна кривая, которая задается массивом ctrlPoints
[code]
gluNurbsCurve(theNurb,
                    KnotsCount,
                    @curveKnots[0],
                    3,
                    @ctrlpoints[0, 0],
                    4,
                    GL_MAP1_VERTEX_3);
[/code]

>то у тебя все-таки кривые Безье или NURBS (non-uniform rational B-splines)?
думаю что NURBS более похоже на правду (смотрю этот же чертеж в AutoCAD: NURBS - правильно, а просто Безье - лишь отдаленно напоминает мою загогулину)


 
MBo ©   (2004-06-17 15:49) [7]

>NURBS более похоже на правду
Ууу, здесь алгоритм намного сложнее, эффективная самостоятельная реализация трудна, и лучше все же использовать опенжл-ские функции.


 
MBo ©   (2004-06-17 15:58) [8]

http://devworld.apple.com/dev/techsupport/develop/issue25/schneider.html


 
WondeRu ©   (2004-06-17 16:07) [9]

2MBo ©   (17.06.04 15:49) [7]
Здесь есть трабл: при каждой перерисовке в  ОпенЖЛ заново пересчитывается кривая! мне бы один раз почситать и рисовать их!


 
Rouse_ ©   (2004-06-17 16:51) [10]

> [9] WondeRu ©   (17.06.04 16:07)
А если по тупому array of TPoint (с учетом что ты просчитываешь каждую точку руками) ?


 
WondeRu ©   (2004-06-17 17:05) [11]

>А если по тупому array of TPoint (с учетом что ты просчитываешь каждую точку руками) ?
Можно и "по тупому", только попробуй просчитай "каждую точку руками"! Я вот взялся за теорию от [8]!
Или я не понял? Может поподробнее?


 
Rouse_ ©   (2004-06-17 17:12) [12]

> [11] WondeRu ©   (17.06.04 17:05)
Ну так все правильно, таким макаром ты и просчитаешь каждую точку, ее координаты занесешь в массив и не нужно будет каждый раз пересчитывать...


 
WondeRu ©   (2004-06-17 17:20) [13]

2Rouse_ ©   (17.06.04 17:12) [12]
с этим проблем нет! Проблема: [b]"КАК СЧИТАТЬ?"[/b]


 
Rouse_ ©   (2004-06-17 17:22) [14]

> [13] WondeRu ©   (17.06.04 17:20)
Ну так тебеже по ссылке MBo все формулы даны...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
1-1087476325
Maxuz
2004-06-17 16:45
2004.07.04
Unicode


3-1085681089
U96
2004-05-27 22:04
2004.07.04
UpdateSQL


1-1087465477
Артем К.
2004-06-17 13:44
2004.07.04
Вывод первой буквы текста Labela другим шрифтом?


14-1087058594
AZ
2004-06-12 20:43
2004.07.04
Upgrade hardware & setup Win98


10-1016002202
comwad
2002-03-13 09:05
2004.07.04
Corba.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский