Главная страница
    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.47 MB
Время: 0.036 c
14-1087131562
SergP
2004-06-13 16:59
2004.07.04
TClientSocket, OnError


4-1084443548
Ozone
2004-05-13 14:19
2004.07.04
Модем


6-1083959776
Prankster
2004-05-07 23:56
2004.07.04
post


4-1085210397
tytus
2004-05-22 11:19
2004.07.04
Как свернуть все окна?


1-1087460995
besen-ok
2004-06-17 12:29
2004.07.04
Как узнать длину строки типа AnsiString ? (-)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский