Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.04.2002, 20:19
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 1  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Question How much is the fish ?

...треугольное колесо было усовершенствованием по отношению к квадратному: стало на один угол меньше

тут столько всего про curveTo в последнее время понаписали... но вопрос из этой же серии:
на этот раз - как рассчитать координаты вершины кривой ?

есть кривая между точками
a = {x: ax, y: ay};
b = {x: bx, y: by};
с управляющей точкой
c = {x: cx, y: cy};

как сосчитать координаты вершины того, что получится в результате curveTo ?

Старый 13.04.2002, 02:04
Aib вне форума Посмотреть профиль Отправить личное сообщение для Aib Посетить домашнюю страницу Aib Найти все сообщения от Aib
  № 2  
Aib

Регистрация: Oct 2001
Адрес: Россия, Казань
Сообщений: 270
Привет, Nox Noctis
Конкретизируй понятие "вершина", а то не совсем ясно.
__________________
The war does not determine who is right. Only who is left.

Старый 13.04.2002, 13:09
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
hi, Aib
на тебя вся надежда

у нас внутри угла из трех точек строится кусок гладкой функции... у этой функции есть экстремум (=точка перегиба) - вот его и надо найти

например:
Код:
function cross(xy, th) {
	this.lineStyle(th, 0xFF66FF, 100);
	this.moveTo(xy.x-3, xy.y-3);
	this.lineTo(xy.x+3, xy.y+3);
	this.moveTo(xy.x-3, xy.y+3);
	this.lineTo(xy.x+3, xy.y-3);
}
a = {x:100, y:100};
b = {x:100, y:250};
c = {x:300, y:175};
cross(a, .1);
cross(b, .1);
cross(c, .1);
this.lineStyle(2, 0x006600, 100);
this.moveTo(a.x, a.y);
this.curveTo(c.x, c.y, b.x, b.y);

// тогда положение вершины легко угадать:
extremum = {x:200, y:175};
cross(extremum, 3);
а вот как найти эту точку если кривая несимметрична...

Старый 13.04.2002, 16:17
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 4  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Если тебя устроит достаточно точное приближение, то просчитать можно так (я исхожу из того, что твои точки а и бэ по прежнему лежат на одной вертикали, а колбасится только точка цэ). Создаешь пустой мувиклип, рискешь в нем прямую а-бэ и твою курву (с заливкой). Делаешь клипу getBounds по паренту, соответственно узнаешь икс своей точки перегиба, так как эта точка будет либо самая правая в клипе, либо самая левая. Дальше есть два варианта.
1) можно сделать достаточно малый отступ от найденного икса в сторону прямой а-бэ и пройтись хиттестом по вертикали этого икса с малым шагом, таким образом ты получишь (приблизительно) точки пересечения этой вертикали и своей курвы достаточно близко от точки перегиба, чтобы с уверенностью сказать, что середина этого отрезка и есть (опять же приблизительно) искомый игрек.
2) есть предположение, что эта точка лежит на пересечении найденной вертикали и отрезка, соединяющего середину а-бэ с точкой цэ, но это только мое предположение, я недостаточно хорошо знаю матиматику этих кривых, сори. Хотя на первый взгляд выглядит логично.

Удачи.
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 13.04.2002, 16:42
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
идея понятная, только нужно-то изобрести способ для общего случая... и хорошо бы математический а не ударно-механический

я щас попробую с хиттестом поизвращаться, но все равно эта идея мне не нравится... тормоза это, да еще в результате не окупающиеся...

а насчет середины аб - это не так, к сожалению

вот примерчик - я провожу биссектрису угла acb и перпендикуляр из точки c к отрезку ab... видно, что ни то ни другое ничего очевидно-полезного не дает

Код:
function cross(xy, th) {
	this.lineStyle(th, 0xFF66FF, 100);
	this.moveTo(xy.x-3, xy.y-3);
	this.lineTo(xy.x+3, xy.y+3);
	this.moveTo(xy.x-3, xy.y+3);
	this.lineTo(xy.x+3, xy.y-3);
}
//
a = {x:150, y:100};
b = {x:100, y:250};
c = {x:300, y:175};
m = {x: (a.x+b.x)/2, y: (a.y+b.y)/2};
//
cross(a, .1);
cross(b, .1);
cross(c, .1);
cross(m, .1);
this.lineStyle(2, 0x006600, 100);
this.moveTo(a.x, a.y);
this.curveTo(c.x, c.y, b.x, b.y);
this.lineStyle(.1, 0xCCCCCC, 100);
this.lineTo(a.x, a.y);
this.lineTo(c.x, c.y);
this.lineTo(b.x, b.y);
//
function norma(c, a, b) {
	var u = ((c.x-b.x)*(a.x-b.x)+(c.y-b.y)*(a.y-b.y))/((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
	return {x:b.x+u*(a.x-b.x), y:b.y+u*(a.y-b.y)};
}
//
p = norma(c, a, b);
cross(p, .1);
this.lineStyle(1, 0xCC9933, 100);
this.moveTo(m.x, m.y);
this.lineTo(c.x, c.y);
this.lineStyle(1, 0x0000FF, 100);
this.lineTo(p.x, p.y);
//
stop();
ммм.... только что пришла мысль насчет средней линии ограничивающего треугольника... будем экспериментировать...


Последний раз редактировалось Nox Noctis; 13.04.2002 в 16:46.
Старый 13.04.2002, 16:56
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 6  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Поставь эксперимент, напиши код, рисующий курву во время таскания точки цэ мышкой и одновременно роняющий из цэ на а-бэ бисектриссу, медиану, высоту и тэдэ, как минимум у тебя будет визуальнае представление, что там происходит. Конечно, приближение итерационными методами не самый лучший алгоритм...
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 13.04.2002, 17:21
RDA вне форума Посмотреть профиль Отправить личное сообщение для RDA Посетить домашнюю страницу RDA Найти все сообщения от RDA
  № 7  
RDA
 
Аватар для RDA

Регистрация: Sep 2000
Адрес: Москва
Сообщений: 239
Если я не ошибаюсь, то curveTo строит кривую Безье второго порядка.
В таком случае точка перегиба находится очень просто - это середина отрезка соединяющего середины отрезков до управляющей точки. т.е.
Код:
l = {x: (c.x/2+a.x/4+b.x/4),y: (c.y/2+a.y/4+b.y/4)};

cross(l,2);


Последний раз редактировалось RDA; 13.04.2002 в 17:28.
Старый 13.04.2002, 18:29
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ну что я могу сказать.... я все-таки изобрел велосипед... с треугольными колесами...

вершина кривой лежит на пересечении медианы со средней линией треугольника 'abc'... а средняя линия и медиана точкой пересечения делятся пополам
...детский сад

итак, финальный вариант
(три контрольные точки можно перетаскивать)


Последний раз редактировалось Nox Noctis; 13.04.2002 в 18:39.
Старый 13.04.2002, 18:34
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 9  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Отрезок, соединяющий середины AC и BC параллелен AB, соответственно медиана из вершины C треугольника A1B1C совпадает с медианой треугольника ABC, а значит мое предположение (2 (см выше)) было верно. Я ведь предлагал не биссектрису, а именно медиану.

2RDA
Пасиб, буду знать :)
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 13.04.2002, 18:58
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 10  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
всем спасибо

как я с медианой лажанулся... сработала какая-то дурацкая уверенность что все должно быть хитрее, чем оно есть на самом деле

код от финального примерчика теперь тут

Создать новую тему   Часовой пояс GMT +4, время: 11:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:56.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.