Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564

Сглаживание линии, проходящей через вершины

16.06.2016, 17:38. Показов 1053. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем есть вершины, по ним должна строиться кривая, пересекая их.
Не знаю существует ли уже готовый алгоритм, который делает это, поэтому и спрашиваю.

Желательно, чтоб алгоритм работал основываясь на трёх вершинах, при этом основываясь на третьей, рисовал бы линию только для первых двух. (либо осн. на первой - рисовал линию для 2-3)

Например если есть точки A B C, при этом AB строится по ф. x=2*y ; а BC стр. по ф. y=2*x.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2016, 17:38
Ответы с готовыми решениями:

Вычислить расстояние от вершины куба до его диагонали, не проходящей через эту вершину
Дан куб, длина ребра равна 5. Вычислить расстояние от вершины куба до его диагонали, не проходящей через эту вершину..

Определите момент инерции листа относительно оси, проходящей через две противоположные вершины квадрата
металлический лист толщиной 3,0 мм имеет форму квадрата со стороной 1,25 м и массу 38,0 кг.Определите момент инерции листа относительно...

Определить, можно ли через точку А3 провести прямую, перпендикулярную прямой, проходящей через точки А1 и А2
Помогите пожалуйста. Есть задача: Ввести с клавиатуры координаты точек A1(x1, y1), A2(x2, y2), A3(x3, y3). Определить, можно ли через...

8
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
16.06.2016, 17:47
https://ru.wikipedia.org/wiki/Интерполяция
Один из:
https://ru.wikipedia.org/wiki/... н_Лагранжа
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
16.06.2016, 20:35  [ТС]
Как то всё очень размыто.. Как нибудь бы эту "интерполяцию" применить бы к алгоритму Брезенхема
function line(x0, x1, y0, y1)
int deltax := abs(x1 - x0)
int deltay := abs(y1 - y0)
int error := 0
int deltaerr := deltay
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
if 2 * error >= deltax
y := y - 1
error := error - deltax
где отталкиваясь от зависимости третей точки - можно было бы суммировать с error, что дало бы нужный результат.
Но тут такое дело, я тут посмотрел чисто визуально, даже при одной функции BC (например я взял y=2*x), зависимость кривой AB будет меняться даже от длины BC.
Не знаю как это правильно выглядит, но вот в пэинте набросал, видно, что обе кривые имеют общие AB точки, но при этом при отдалении C координаты (даже по одной и той же формуле) кривая AB должна получиться более выгнутой в даль при дальней С.
Изображения
 
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
16.06.2016, 21:17
Так нужно сглаживать данные графика или картинку графика?
Вот в geogebra вроде как Лагранж проводит он не всегда адекватный, нужно чаще точки.

Гляньте сплайн Акимы, b-сплайн. Билинейную интерполяцию, трилинейную для картинки.
А вообще вроде как брезенхем это софтверный колхоз еще тот…
Зачем занимать время процессора графикой? Его не для этого делали.
Почему не использовать видеокарту которую и делали для графики у которой и рисовалка линий аппаратная и сглаживание аппаратное графики.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
16.06.2016, 21:23  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Так нужно сглаживать данные графика или картинку графика?
Линию сглаживать.

Всё пошло от алгоритма Безье. Я решил сделать упрощение алгоритма, взял 5 контрольных точек (2 крайние, 1 центральная -0.5 и две 1\4 и 3\4), нарисовал линии по ним по Брезенхему, в итоге получил координаты опорных точек для построения кривой, вот теперь надо по этим контрольным точкам - нарисовать саму кривую.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Почему не использовать видеокарту которую и делали для графики у которой и рисовалка линий аппаратная и сглаживание аппаратное графики.
Нафиг её. Нужна формула))
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
16.06.2016, 21:49
Так кривые Безье и дают координаты всех точек. Простейший способ дискретный мелкий шаг t.
По 5 точкам это нестандартная формула наверно алгоритмом кастельжо только… на вики была ссылка на него. И зачем она вам? Берите как все 4 точки и готовые формулы.
Кривые Безье
Берите кубическую кривую.
https://ru.wikipedia.org/wiki/Кривая_Безье
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
17.06.2016, 00:35  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Так кривые Безье и дают координаты всех точек. Простейший способ дискретный мелкий шаг t.
Допустим у нас P0 P1 и P2 имеют разную длину, если брать то как показано на Вики, то t - 100 шагов, при этом каждый шаг это цикл вычисления Q0 и Q1 от P0-P1(t) и P1-P2(t), а так же самой B от Q0-Q1(t). Если посчитать, то 100 шагов вообще не нужны, особенно если длины линий P0-P1 и P1-P2 меньше 100 пикселей, даже если больше - лишние циклы разсчёта.. Ведь всё же проще, по крайней мере для квадратичной - можно взять экстремумы - t 0.5(это вершина пораболы будет), крайние, и я лично решил взять ещё две, для надёжности.. Таким способом кол-во циклов я сокращяю с 99 до 4 (t), а рисование самой пораболы - можно осуществить и более примитивными методами - сглаживанием. Вот только я не знаю какую формулу нужно применить для осуществления оного.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
По 5 точкам это нестандартная формула
Нужно сглаживание по трём точкам, как я уже сказал, с учётом что кривая может быть и не пораболой.
Вообще я 5 точек выбрал не просто так, просто если я возьму t=100, то получится, что просадка будет если длина линий будет больше 100, получится что иногда шаг будет больше одного 1.5 пикселей, а это уже получится что один пиксель не будет закрашен.
В любом случае я хочу именно так сделать, вообще мне просто самому интересно как это получится. По крайней мере заняться разбором кривой Безье по косточкам было достаточно интересно, как и с прямой Брезенхема (я правда чуть голову не сломал, пока дошло как там пол пикселя по целочисленной вычисляется, но оно стоило того).
Да и занимаюсь я этим всем просто потому что мне нравятся подобные вещи, ну а по поводу разсчётов видеокарты - ну не везде же они есть.

Заодно кстати понял как работает алгоритм Ву) Правда не понял почему его так усложнили, ведь у Брезенхема тоже есть десятичная, по которой можно вычислить %отклонения от центра.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
17.06.2016, 09:19
Цитата Сообщение от Izual Посмотреть сообщение
P0 P1 и P2 имеют разную длину
Pn это координаты точки у них нет длинны.
Цитата Сообщение от Izual Посмотреть сообщение
t - 100 шагов,
t просто параметр от 0 до 1.
Цитата Сообщение от Izual Посмотреть сообщение
даже если больше - лишние циклы разсчёта..
Как то вы странно что то придумали.
https://rsdn.ru/article/multimedia/Bezier.xml
Цитата Сообщение от Izual Посмотреть сообщение
а рисование самой пораболы
Кривая Безье это не парабола, что то у вас вообще каша. Берите формулы и стройте по ним с шагом например 0.05 t. Посмотрите анимации на вики, вы вообще не понимаете как строиться кривая.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
17.06.2016, 10:36  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Pn это координаты точки у них нет длинны.
То что имелось ввиду - ясно и понятно, не надо утрировать до уровня ниже плинтуса.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
t просто параметр от 0 до 1.
Ну ты зайди в вики и посмотри. От 0 до 1, где на самом деле от 0.00 до 1.00 (т.е. 100 шагов)
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Как то вы странно что то придумали.
Ничеuо не придумано, всё взято из статьи вики. Там чёрным по белому написана зависимость:
P0Q0/P0P1 = P1Q1/P1P2 = Q0B/Q0Q1
А в ссылке на рсдн'е мусор какой то.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Кривая Безье это не парабола, что то у вас вообще каша.
Из вики:
степень кривой всегда на одну ступень ниже числа контрольных точек. Например, при трех контрольных точках форма кривой — парабола;
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Берите формулы и стройте по ним с шагом например 0.05 t.
НАПРИМЕР? Математика и геометрия превратились из точных наук во что?..
[удалено]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2016, 10:36
Помогаю со студенческими работами здесь

В прямоугольной системе координат напишите уравнение сферы, проходящей через точку и через окружность
В прямоугольной системе координат напишите уравнение сферы,проходящей через точку (1,5,1) и через окружность x^2+y^2-2x-10y+23=0,лежащую на...

Установить какую линию определяет уравнение, найти фокусы, вершины, оси линии, нарисовать
Вот сама линия: y2+10x - 10y + 55 = 0 Спасибо огромное!

Сглаживание при рисовании через Graphics
Здравствуйте! Рисую через Graphics. Можно как-то включить сглаживание? Добавлено через 2 часа 59 минут И Graphics.DrawString()...

Пересечения прямой, проходящей через 2 точки
Построить чертеж пересечения прямой, проходящей через 2 точки (x0,y0,z0) и (x1,y1,z1), с плоскостью, параллельной координатной плоскости...

Аппроксимация функцией, проходящей через 2 точки
Помогите пожалуйста: 1. Нужно по точкам построить аппроксимирующую функцию вида y=ax²+bx+c и получить коэффициенты a, b, c, но нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru