![]() |
How much is the fish ?
...треугольное колесо было усовершенствованием по отношению к квадратному: стало на один угол меньше :D
тут столько всего про curveTo в последнее время понаписали... но вопрос из этой же серии: на этот раз - как рассчитать координаты вершины кривой ? есть кривая между точками a = {x: ax, y: ay}; b = {x: bx, y: by}; с управляющей точкой c = {x: cx, y: cy}; как сосчитать координаты вершины того, что получится в результате curveTo ? |
Привет, Nox Noctis :)
Конкретизируй понятие "вершина", а то не совсем ясно. :) :) :) |
hi, Aib :)
на тебя вся надежда :) у нас внутри угла из трех точек строится кусок гладкой функции... у этой функции есть экстремум (=точка перегиба) - вот его и надо найти :( например: Код:
function cross(xy, th) { |
Если тебя устроит достаточно точное приближение, то просчитать можно так (я исхожу из того, что твои точки а и бэ по прежнему лежат на одной вертикали, а колбасится только точка цэ). Создаешь пустой мувиклип, рискешь в нем прямую а-бэ и твою курву (с заливкой). Делаешь клипу getBounds по паренту, соответственно узнаешь икс своей точки перегиба, так как эта точка будет либо самая правая в клипе, либо самая левая. Дальше есть два варианта.
1) можно сделать достаточно малый отступ от найденного икса в сторону прямой а-бэ и пройтись хиттестом по вертикали этого икса с малым шагом, таким образом ты получишь (приблизительно) точки пересечения этой вертикали и своей курвы достаточно близко от точки перегиба, чтобы с уверенностью сказать, что середина этого отрезка и есть (опять же приблизительно) искомый игрек. 2) есть предположение, что эта точка лежит на пересечении найденной вертикали и отрезка, соединяющего середину а-бэ с точкой цэ, но это только мое предположение, я недостаточно хорошо знаю матиматику этих кривых, сори. Хотя на первый взгляд выглядит логично. Удачи. |
идея понятная, только нужно-то изобрести способ для общего случая... и хорошо бы математический а не ударно-механический :)
я щас попробую с хиттестом поизвращаться, но все равно эта идея мне не нравится... тормоза это, да еще в результате не окупающиеся... а насчет середины аб - это не так, к сожалению вот примерчик - я провожу биссектрису угла acb и перпендикуляр из точки c к отрезку ab... видно, что ни то ни другое ничего очевидно-полезного не дает :( Код:
function cross(xy, th) { |
Поставь эксперимент, напиши код, рисующий курву во время таскания точки цэ мышкой и одновременно роняющий из цэ на а-бэ бисектриссу, медиану, высоту и тэдэ, как минимум у тебя будет визуальнае представление, что там происходит. Конечно, приближение итерационными методами не самый лучший алгоритм...
|
Если я не ошибаюсь, то curveTo строит кривую Безье второго порядка.
В таком случае точка перегиба находится очень просто - это середина отрезка соединяющего середины отрезков до управляющей точки. т.е. Код:
l = {x: (c.x/2+a.x/4+b.x/4),y: (c.y/2+a.y/4+b.y/4)}; |
ну что я могу сказать.... я все-таки изобрел велосипед... с треугольными колесами...
вершина кривой лежит на пересечении медианы со средней линией треугольника 'abc'... а средняя линия и медиана точкой пересечения делятся пополам :D ...детский сад :p :p итак, финальный вариант (три контрольные точки можно перетаскивать) |
Отрезок, соединяющий середины AC и BC параллелен AB, соответственно медиана из вершины C треугольника A1B1C совпадает с медианой треугольника ABC, а значит мое предположение (2 (см выше)) было верно. Я ведь предлагал не биссектрису, а именно медиану.
2RDA Пасиб, буду знать :) |
всем спасибо :)
как я с медианой лажанулся... сработала какая-то дурацкая уверенность что все должно быть хитрее, чем оно есть на самом деле http://www.plauder-smilies.de/icon16.gif код от финального примерчика теперь тут |
М-да, надо по раньше домой приходить... :D :D :D
|
На будущее могу подкинуть формулу (может пригодится кому). Если нам известна некоторая функция (ввиде y=f(x)), то подобную точку, расположенную между двумя заданными можно найти из формулы:
f(x2)-f(x1)=f'(x)*(x2-x1); x2>x1; x - искомая координата по X P.S. Формула достаточно известная, но о таком её применении почему-то почти нигде не пишут. |
2Aib
чччерт, гениально ;) ;) ;) это же формула производной, только без пределов и что значит не пишут ? в школе когда-то так и искали экстремумы, разве нет ? :D :D только вот найти уравнение кривой, чтобы потом брать производную обычно (как в данном, например, случае) - это само по себе является проблемой... ты может и знаешь как составить уравнение кривой второго порядка по таким данным, а я вот нет :) ...и проводить исследования в этой области (освежать воспоминания то есть) что-то не сильно тянет (ну, если только припрет совсем :D ) |
Ну, в данном случае действительно её использование не самый рациональный вариант. Даже зная формулу, предстоят нехилие подсчёты. Это Я просто закинул
Экстремумы в школе считали, но к этой формуле никакого отношения не имеет - она вообще для других целей используется (что-то из матанализа). А на её геометрическую интертрепацию Я случайно в одном о-о-очень толстом справочнике наткнулся, когда курсовик писал. |
Похоже на теорему Лагранжа, если мне память не изменяет :) :)
|
стандартный метод:
ищем критические точки (нули первой производной) и смотрим знак f' в получившихся интервалах; если знак слева и справа от корня меняется, то экстремум есть. если надо, ту же процедуру проводим со второй производной и узнаем как меняется выпуклость\вогнутость. ...да упокоится с миром тот, кто будет это реализовывать во флэше :D :p |
| Часовой пояс GMT +4, время: 17:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.