|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|
Формула сглаживания высоты точек в кругу02.09.2017, 15:56. Показов 2723. Ответов 19
Метки нет (Все метки)
Привет.
Есть 3д точки по кругу в плоскости. Подскажите, как можно постепенно сглаживать их высоты так, чтобы высоты как-то к среднему между друг другом медленно изменялись, чтобы из шума перейти к гладкой поверхности. Не знаю как еще объяснить. Вот скрин выбранного режима редактирования в редакторе Warcraft 3.
0
|
|
| 02.09.2017, 15:56 | |
|
Ответы с готовыми решениями:
19
Формула: дроби (числитель и знаменатель той же высоты, что и вся формула) Даны координаты n точек, указать номера тех точек, которые принадлежат кругу с центром в точке (x,y) и радиусом R Отпечатать расстояния от начала координат для тех точек,которые принадлежат кругу с заданным радиусом, и число таких точек. |
|
|
||||
| 02.09.2017, 16:19 | ||||
|
0
|
||||
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
||
| 02.09.2017, 16:38 [ТС] | ||
|
jogano, в плоскости, имелось ввиду, что круг лежит в координатах x,y. Или, как в играх, x,z.
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 02.09.2017, 17:14 | |
|
Задать закон приращения высоты квадратам(как форма колокола) и от времени нажатия “изменить высоту” по таймеру прибавлять высоту квадратам. Функцию можно задать кривой Безье 3 степени. Таскаем точки на кривой = редактируем форму функции.
0
|
|
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|
| 02.09.2017, 17:26 [ТС] | |
|
Excalibur921, ой, я ничего не понял)
Тут не нужно время. Надо за 1 проход чу-чуть сгладить, это чу-чуть контролируется силой. Квадраты не изменяют высоту. Изменяется высота точек квадрата. К каждой точке прилегает 4 квадрата. Но это не важно. Там есть сетка, вот пересечение линий сетки это точки. Первая картинка изначальная ситуация. Вторая это в 1 месте сглажено за проходов так 100-150.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 02.09.2017, 19:28 | ||
Сообщение было отмечено NovaEiz как решение
РешениеТам например 3 фактора: 1)Радиус кисти 2)K,форма профиля(закон) это константы от 0 до 1 3)W,Вес от 0 до 1 Итерационная формула может такая: Читает Z вершины и находит новый Z. Z=Z*K*W Нужно сделать редактируемую форму функции чтобы настраивать ей профиль и делать приплюснутые холмы и т.д. Достаточно задать 2д функцию причем половину “профиля”. Остальные высоты зеленых квадратов это копирование и поворот вокруг центра зеленой окружности. Можно взять Безье 2 степени (квадратичная кривая) как упрощение. https://ru.wikipedia.org/wiki/Кривая_Безье P0,P2 неподвижны Таскаем P1 меняем форму функции. Просто так взять f(x) нельзя. Нужно зная X точки на кривой найти “t”. Зная “t” найти Y подставив в формулу кривой Безье. B=x(A) точка на кривой P0=x(A0) P1=x(A1) P2=x(A2) Там разные формулы поиска t при разных ситуациях. Сработала формула 1. P0-2 P1+P2 !=0 Вместо “B” нужно подставить X точки на оси ОХ. Разбить кривую на например N=5 интервалов и всем найти t затем подставить эти t в уравнение кривой Безье найти всем N координату Y . t=(P0-P1+sqrt((P0-2 P1+P2) B+P1^2-P0 P2))/(P0-2 P1+P2) В итоге таскаем A1 точку и получаем координаты Y на кривой равномерных точек по OX это коэффициенты K для каждой N точки. Но наверно лучше сделать подобное из двух кривых 2 степени, так более похоже на редактор. A2 можно таскать на отрезке между A1 A3.
1
|
||
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|||
| 02.09.2017, 20:07 [ТС] | |||
|
Excalibur921, спасибо.
Я пока сильно не вникал в ваш пост. Возник вопрос. Если мы используем кривую безье, то: Допустим, что внутри зеленого круга будет 3 линии по X, но так же еще и будет 3 линии по Y. Как вообще будут изменяться точки в пересечении этих линий? Брать среднее из результатов по бизье? Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 10 минут Excalibur921, т.е. надо использовать Квадратичные кривые безье? Добавлено через 2 минуты Вот эту формулу использовать? Мда. Никак не могу с вики вставить картинку. Кроме через чур сложного пояснения, в ней еще и картинки svg...
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 03.09.2017, 09:56 | |
Сообщение было отмечено NovaEiz как решение
Решение
Выделяет зеленый круг габаритами 3 на 3:
Задаете радиус R зеленого круга. Все координаты выделенных вершин в матрицу M0. 0, xyz, 0, xyz, xyz, xyz, 0, xyz, 0, Находите расстояние от крайней слева вершины до центральной с учетом только XY вершин. Это расстояние принимаете за 1 и пропорцией пересчитываете все остальные расстояния. В итоге в новой матрице M1 все будет от 0 до 1 независимо от R. Каждому элементу матрицы M1 находите t, где B это элемент матрицы M1 Это в простом примере с одной кривой имеено эта формула для t. Если будете брать 2 кривых 2 степени то для каждой отдельно нужно будет искать t и делать проверки теми 3 ситуациями Если условие 1 то формула №1 Если условие 2 то формула № 2 Если условие 3 то формула №3 t=(P0-P1+sqrt((P0-2 P1+P2) B+P1^2-P0 P2))/(P0-2 P1+P2) Подставив t в уравнение кривой (1-t)^2 P0+2t (1-t) P1+t^2 P2 находите Y. Записываете эти Y они же будут K в новую матрицу M2. Пересчитываете новые Z вершин для M0 по формуле например такой: Z=Z+W*K W весовой коэф. например от 0 до 1. Матрицу с К нашли это M2. Z вершин брать из M0. Сделаете можно будет упросить собрать в одно уравнения или функцию. Можно не считать всю M2 постоянно а считать только ¼ матрицы т.к. фигура симметрична остальное K просто копировать. В unity3d похоже матрица M2 это несколько серых картинок растров а не аналитическая формула. Вот кстати первый браш похоже ваш…черный круг размытый фильтром Гаусса. http://www.3dbuffer.com/articl... auTnvnbegQ Например в Photoshop рисуют или делают поверхность в любом 3д редакторе и берут карту высоты (z-буфер).
1
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 03.09.2017, 10:55 | |
|
Можно подправить косинусоиду.
1
|
|
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|||
| 03.09.2017, 10:57 [ТС] | |||
|
Excalibur921, спасибо вам за труд.
Жесть какая) Но я и не ожидал что будет просто. На каком-то из форумов в подобной теме автор выбрал для себя кубический безье. Т.е. надо брать по порядку 4 точки с шагом +1, т.е. [n,n+1,n+2,n+3], [n+1,n+2,n+3,n+4].
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||
| 03.09.2017, 11:28 | ||||
|
Можно взять кусок косинусоиды но тогда не настроить профиль выдавливания.
1
|
||||
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|||||||||||||||||||||||||||||
| 03.09.2017, 13:16 [ТС] | |||||||||||||||||||||||||||||
|
Добавлено через 10 минут Excalibur921, вот что нашел, прям по теме Добавлено через 1 минуту хотя, в круг это не вписать( Добавлено через 1 час 21 минуту Excalibur921, нашел функцию для кубической кривой бизье.
Кликните здесь для просмотра всего текста
del
Т.е. надо делать так, как я понимаю: Есть 4 точки p0, p1, p2, p3. Кликните здесь для просмотра всего текста
Верно? Но странно что в функции весь вектор умножается на некие переменные. Так же X и Z тоже будут изменяться. Хм Добавлено через 4 минуты Хах. Работает как надо) Кликните здесь для просмотра всего текста
Добавлено через 57 секунд Теперь надо совместить это с перекрёстной кривой
0
|
|||||||||||||||||||||||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||
| 03.09.2017, 14:25 | ||||
|
Зачем 3д вектора? У вас сводиться к плоской задаче и все формулы уже есть.
0
|
||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||
| 03.09.2017, 14:26 | ||||
|
Зачем 3д вектора? У вас сводиться к плоской задаче и все формулы уже есть.
0
|
||||
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
|||
| 03.09.2017, 15:23 [ТС] | |||
Добавлено через 52 минуты Excalibur921, да, всё работает. Но конфликт на пересечениях есть, надеюсь усреднение точек на пересечениях поможет)
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 03.09.2017, 18:20 | |
Сообщение было отмечено NovaEiz как решение
Решение
Попробовал на GeoGebra с такой функцией:
centrR= XY центр зеленой. R= радиус зеленой. W вес, сделать слайдером от 0 до например 5 подобрать по месту. Берете XY вершины A0 крайней слева по центру из всех выделенных зеленым ![]() Вот на рис: Находите расстояние distanceMAX между A0 и centrR. distMAX=sqrt( (x(A0)-x(centrR))^2+ (y(A0)- y(centrR))^2 ) Теперь каждой выделенной зеленым вершине: An=Новая вершина Находите расстояние dist между An и centrR: dist = sqrt( (x(An)-x(centrR))^2+ (y(An)- y(centrR))^2 ) Находите долю от distMAX: distNew= dist/distMAX Взять функцию от distNew: K=0.5+cos(distNew*Pi)/2 Записать К в массив коэффициентов для каждой вершины An. Взять новую An. В итоге получим матрицу(массив) коэффициентов K. Ее не нужно пересчитывать если не изменились R или кривая функции для К. Теперь находим выделенным вершинам новые Z: Zn=Zn+W*Kn Итого: distMAX=sqrt( (x(A0)-x(centrR))^2+ (y(A0)- y(centrR))^2 ) Можно собрать в одну формулу: Взять вершину An. dist = sqrt( (x(An)-x(centrR))^2+ (y(An)- y(centrR))^2 ) Если dist <= distMAX то считать дальше иначе взять другую вершину. distNew= dist/distMAX K=0.5+cos(distNew*Pi)/2 Z=Z+W*K Сделаете две Безье будет и настраиваемый профиль.
1
|
|
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
||
| 03.09.2017, 20:38 [ТС] | ||
|
Excalibur921, дак это вы мне пытались объяснить как поднимать/опускать вершины? Лол)
Мне нужно было сглаживание точек в уже созданном террейне Добавлено через 2 минуты Я же привел пример из двух картинок в этом посте Добавлено через 2 минуты То, что вы щас описали у меня сделано. Не понимаю, а причем тут сглаживание? Добавлено через 1 минуту Вот это делает сглаживание?
Excalibur921, я сделал сглаживание в созданном террейне, но работает не корректно пока. Я сначала прохожу все горизонтальные линии в окружности, а потом все вертикальные, в точках пересечений линий беру средний Y из полученных новых точек. Но чот как-то не корректно работает. В принципе работать можно, но как-то не хочется работать с не идеальным инструментом) Добавлено через 26 минут Всё, сделал идеальным. Теперь сначала прохожу все горизонтальные линии в окружности, потом записываю новые точки в рабочие, а потом все вертикальные. Finish!a Добавлено через 53 секунды Excalibur921, спасибо за внимание, я ценю эту помощь) Добавлено через 21 секунду Excalibur921, го в следующую тему про шум)
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 03.09.2017, 22:06 | |
|
Не знаю как делают..вот догадка:
Если сглаживать через параметрические кривые то наверно нужно усреднить высоты точек в некой области чтобы получить опорные точки для поверхности(красные). Найти середины между красными это фиолетовые. Строить кривые 2 ст. по тройкам точек. A1,A2,A3 A3,A4,A5 и т.д. Затем зная X точки данных(узел сетки) найти t. Подставить в формулу нужной кривой t и найти Z. Но наверно тут правильней строить параметрическую поверхность а не кривые. Искать центр масс точек по Z лежащих внутри сферы получить красные точки. Снова найти фиолетовые центры и строить поверхность из кривых 2 ст. Затем зная X точки данных(узел сетки) найти t для кривой по X. Затем зная Y точки данных(узел сетки) найти t для кривой по Y. Может это и аналог сглаживания по Х затем тоже только по Y…это вопрос математикам.
1
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 04.09.2017, 08:32 | |
|
Зачем вам тут параметрические поверхности или кривые?
Самое простое Ordered Grid SuperSampling (OGSS) Трехкратное разрешение сетки и суперсемплинг ядром 3 на 3. https://ru.wikipedia.org/wiki/... глаживания
1
|
|
|
14 / 14 / 5
Регистрация: 27.06.2017
Сообщений: 254
|
||||||
| 29.09.2017, 17:41 [ТС] | ||||||
|
Excalibur921, подскажи, пожалуйста, как в этот метод добавить силу?
0
|
||||||
| 29.09.2017, 17:41 | |
|
Помогаю со студенческими работами здесь
20
Алгоритм сглаживания – “Скользящее среднее”. Обработка краевых точек
Построение точек по кругу количество точек, принадлежащих кругу
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|