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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.08.2013, 16:14
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию как нарисовать безье на EnterFrame

Второй день не могу понять, как нарисовать безье по EnterFrame.
У меня есть начальная точка и конечная. Третью точку я создаю рандомом, основываясь на заданном допуске по y и расстоянию между точками. Получается, что мне сначала нужно прибавлять координаты, а потом убавлять. Но как это сделать без if я не знаю, а с if я пока не хочу рассматривать, не люблю я их.
Если кто то знает, подскажите пожалуйста, как это сделать.

Добавлено через 1 час 4 минуты
Был бы очень рад, если дали ссылки на примеры с расчетами физики и геометрии.

Добавлено через 2 часа 33 минуты
Читаю книги)

Старый 25.08.2013, 20:31
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Кривая Безье вычисляется по специальной формуле, а как вы её вычисляете?
Или вы хотите нарисовать такую кривую в EnterFrame через методы curveTo? Если да, то так не выйдет.

Посмотрите здесь - http://help.adobe.com/ru_RU/FlashPla...erSegment.html

Создайте кривую, и в EnterFrame с помощью метода getValue(t:Number):Point нарисуйте кривую стандартными методами lineTo()

Что-то в этом роде:
Код AS3:
package
{
	import fl.motion.BezierSegment;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author Samana
	 */
	public class Main2 extends Sprite
	{
		private var p1:Point = new Point(50, 50);
		private var p2:Point = new Point(100, 400);
		private var p3:Point = new Point(200, 0);
		private var p4:Point = new Point(500, 450);
 
		private var curve:BezierSegment = new BezierSegment(p1, p2, p3, p4);
		private var time:Number = 0;
 
 
		public function Main2()
		{
			addEventListener(Event.ENTER_FRAME, enterFrame);
 
		}
 
		private function enterFrame(e:Event):void
		{
 
			time += 0.01;
			graphics.clear();
			graphics.lineStyle(2, 0xFFFF00);
 
			graphics.moveTo(p1.x, p1.y)
			for (var i:Number = 0; i < time; i += 0.01) // i+=0.01 чем меньше число, тем плавнее кривая
			{
				var vPoint:Point = curve.getValue(i)
				graphics.lineTo(vPoint.x, vPoint.y);
			}
 
			if (time > 1) time = 0;
 
 
		}
 
	}
 
}


Последний раз редактировалось samana; 25.08.2013 в 20:58.
Старый 26.08.2013, 23:05
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 3  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
samana Спасибо! я не когда ещё не видел этот раздел!)
На самом деле я вот что делаю ( учусь делать ) - изначально мне доступно долько три параметра (начальнаяТочка ,конечнаяТчка ,диапазонСмешения). И нарисовать мне нужно что то похожее на росток.
Вот как в мультиках растения растут. И получается, что я как всегда поспешил. Сейчас читаю книгу и пробую все от туда и оказывается, что там и скорость и направление и ещё несколько значений надо.
я как то ушел от этой темы не до конца её постигнув, но вот снова столкнулся и решил уже как можно больше сделать и узнать, что бы в будущем не возникло ступоров.

Добавлено через 26 минут
Ого! Спасибо! Обещаю, что как прочту и разберу всё, что прочту в книгах, возьмусь за разбор Вами предложенного способа!


На словах не совсем понимаю как обьяснить, по этому вот иллюстрация -
У меня есть три точки - А,В и С. Чтобы найти угол, я представляю АС как косинус, а СВ синус.
Но я не могу немножечко додуматься, как мне этот угол вычислить по отношению к стейджу.
Может есть какой то метод готовый? Или хоть что нибудь скажите?)
Изображения
 

Старый 27.08.2013, 01:34
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Подскажите пожалуйста, что нужно знать, для воплощения ЭТОГО ?
Если не сложно, то хотя бы просто опишите процесс. я сам уже буду искать и учить.

Старый 28.08.2013, 01:06
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 5  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
okouser Спасибо Вам огромное! я сейчас читаю и смеюсь, а вчера вообще наверное даже покраснел от стыда!) Слов нет! могу сказать, что так со мной не очень часто бывает. И я больше чем уверен, что мой перегруженный мозг так бы и не понял в чем дело! Сегодня целый день читаю и читаю.. И вот у меня ещё один ступор случился, я не знаю как руками высчитать acos. Использовать адобовский мне честно сказать - не хочется. Не хочется - теперь, после того, как я замерил скорость на возведение в степень. Может кто нибудь подсказать, как это сделать? я конечно отдаю себе отчёт, что это не математический форум, но может кто то в погоне за скоростью, нашёл какой нибудь алгоритм... Пусть он бы у меня и оставил в душе чувство "не своего", но я просто в интернете не могу не чего найти, кроме таблицы Брадиса.

Старый 28.08.2013, 02:55
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
okouser Спасибо Вам, что помогаете! Сейчас буду читать!
И оно не столько сложно, сколько нудно) Хочется что то в коде делать, а тут чтение...))
Цитата:
И кто сказал, что собственная реализация будет более быстрой?!
Надо хотя бы попробовать.


Последний раз редактировалось Akopalipsis; 28.08.2013 в 04:17.
Старый 28.08.2013, 10:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы бы лучше объяснили, какой Вам нужен угол, и почему именно угол.
Например, можно достроить проекции сторон на оси координат и получить прямоугольные треугольники с известными сторонами (раз точки известны, то есть их координаты). Будут катеты, соотв. тангенсы, соотв. углы. Все от задачи зависит.
Ну а тригонометрия в ФП написана на С++ и вряд ли возможно найти алгоритм, который будет быстрее на AS3)) Думаю, адоб с радостью бы таким воспользовался. Но не факт)) Блуду вон удавалось обгонять адоб в криптографии. Я бы посоветовал поискать другое решение, другую концепцию решения задачи, а не ее части.
__________________
Reality.getBounds(this);

Старый 28.08.2013, 14:40
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Вы бы лучше объяснили, какой Вам нужен угол, и почему именно угол.
С удовольствием!) Мне надо, чтобы рисовались узоры как на картинке. На ней проиллюстрировано, как при одних и тех же координатах может быть разное развитие рисования. Пока я отталкиваюсь от двух точек, то есть я задаю координаты только двух красных точек + допустимый размах, который учитывается в рандоме создания третей, зелёной координате. Пока у меня вообще нет в голове процесса создания. я пока поставил задачу нарисовать простую безье между точек. Потом манипулируя углом буду пробовать нарисовать рандомную кривую. Затем добавить скорость..и я дальше пока не знаю. Что можете посоветовать?)

Цитата:
и вряд ли возможно найти алгоритм, который будет быстрее на AS3))
я к чему это сказал, когда вчера на форуме я увидел тест скорости кода, мне сразу захотелось его опробовать и первое что попалось мне по руки, был код возведения в степень. И оказалось, что
Код AS3:
a * a //быстрее в два раза чем
Math.pow(a,2);
я не говорю, что возведение в сотую степень будет быстрее, чем Math.pow, но если не попробовать самому найти угол по косинусу, то ведь не узнаешь, быстрее будет или нет.
Цитата:
Я бы посоветовал поискать другое решение, другую концепцию решения задачи, а не ее части.
я не вижу другого решения... я уже думал об этом, но каждый раз опять все к этому возвращается.
Миниатюры
Нажмите на изображение для увеличения
Название: линии.png
Просмотров: 80
Размер:	19.6 Кб
ID:	29946  

Старый 28.08.2013, 16:34
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
//быстрее в два раза чем
Напишите так же, как написали а*а выражение "а в степени 128.631" и сравните с Math.pow. Потом напишите "ручной" код, который будет считать разную степень вместо Math.pow. Сейчас Ваши претензии выглядят как "плохой, негодный микроскоп! им совсем неудобно забивать гвозди!".
Цитата:
С удовольствием!)
Можно и без, но на вопрос Вы так и не ответили.
То, что изображено на картинке, даже близко не содержит намека на то, какой Вам нужен угол.
Вам нужно взять основу для завитка из, скажем, семи точек, координаты которых либо взять в графическом редакторе, нарисовав "базовый" завиток без "отклонений", либо рассчитать по формуле спирали или другой подходящей функции кривой (для стебля например — синусоиды). Затем надо для каждого завитка пробегаться по этому массиву базовых точек и применять к ним рандомные смещения в небольшом диапазоне. Ну и потом транслировать весь набор точек так, чтобы завиток примкнул к стеблю.
__________________
Reality.getBounds(this);

Старый 28.08.2013, 17:14
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 10  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Сейчас Ваши претензии выглядят как "плохой, негодный микроскоп!
Уже понял( Вчера только на неотрицательных и целых числах тренировался, а сегодня первым делом реальные координаты ввёл и понял, что поспешил с комментариями...
Цитата:
на вопрос Вы так и не ответили.
Честно сказать Ваше решение я пока до конца не представил, но сейчас прочту ещё несколько раз и можеть что изменится. Мой замысел вот какой.
Даны две точки А и В и точка С которая ставится рандомом. Она наверное и определяет угол ( который у меня альфа ). минимальная длина узора равняется сумме длины отрезков b и c. К ней рандомно добавляется ещё сколько то лишнего. И вот я начинаю рисовать линию из точки А и основываясь на примере из книги, где говорится о том, что если изменять угол синуса и косинуса, то его результаты в радианах варьируются от -1 до 1. Это получается, как раз завиток. Идеальный круг, но если применить ещё к рисованию скорость, которая замедляется к концу длины узора и как то добавлять угол частями, которые приближают замедление из расчета длины... То вот мне кажется, что получится завиток не правильной формы. как веточка... Но пока это только предположения, точнее сказать, по частям я уже это сделал ( я сделал - замедление скорости, потом прибавил уменьшающуюся толщину, которая уменьшается с замедление, еще сделал завиток и осталось теперь сделать его рандомным и все это соединить.
Изображения
 

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

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

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


 


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


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