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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2011, 00:47
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 11  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
прежде чем писать код, надо вывести уравнение для точки пересечения по вашему условию =) За вас это сделать?

Будет уравнение - помогу с кодом, хотя это уже элементарно.

Добавлено через 2 минуты
Начать код надо с этого, я думаю.
Код AS3:
function findPoint(point1:Point, point2:Point, angle1:Number, angle2:Number):Point
{
...
return ...
}

Старый 17.11.2011, 00:59
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 12  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Возможно надо представить b через искомую точку?
b1 = y0 - x0*tg(a1)
b2 = y0 - x0*tg(a2)

И тогда:


y1 - x1*tg(a1) = y0 - x0*tg(a1)
y2 - x2*tg(a2) = y0 - x0*tg(a2)

y1 - y0 = x1*tg(a1) - x0*tg(a1)
y1 - y0 = (x1 - x0)*tg(a1)
y0 = y1 - (x1 - x0) * tg(a1)

y2 - x2*tg(a2) = y1 - (x1 - x0) * tg(a1) - x0 * tg(a2)
y2 - x2*tg(a2) = y1 - x1 * tg(a1) - x0 * (tg(a1) - tg(a2))
x0 * (tg(a1) - tg(a2)) = y2 - x2*tg(a2) - y1 + x1 * tg(a1)

x0 = (y2 - y1 - x2*tg(a2) + x1*tg(a1))/(tg(a1) - tg(a2))
y0 = y1 - (x1 - x0) * tg(a1)

Вроде нигде не ошибся.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 17.11.2011 в 01:25. Причина: Дописал
Старый 17.11.2011, 01:09
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 13  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
y = x*tg(a) + b, где a - угол между осью Ох и прямой, b - точка пересечения прямой и оси Ох
точка пересечения двух прямых:
х = (b1 - b2) / (tg(a2) - tg(a1))
y = (b1*tg(a2) - b2*tg(a1)) / (tg(a2) - tg(a1))

Но т.к. это точка пересечения двух прямых, а не лучей (помним в чем разница, да?) то надо проверить принадлженость этой точки каждому из лучей.

Добавлено через 1 минуту
А, да, перед вычислениями было бы еще неплохо проверить что а1 != а2, иначе деление на ноль возникнет (прямые/лучи параллельны)

Добавлено через 26 минут
Цитата:
Возможно надо представить b через искомую точку?
b1 = y0 - x0*tg(a1)
b2 = y0 - x0*tg(a2)
Эта точка - место пересечения прямой и оси Ох, у нее всегда у = 0

Добавлено через 45 минут
Код AS3:
package 
{
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author Ookami
	 */
	public class Ololo 
	{
		public function findPoint(point1:Point, point2:Point, angle1:Number, angle2:Number):Point
		{
			var x:Number;
			var y:Number;
			var k1:Number = Math.tan(toRadians(angle1));
			var k2:Number = Math.tan(toRadians(angle2));
 
			if (angle1 == angle2)
			{
				trace("Прямые параллельны");
				return null;
			} else {
				x = (point1.x - point2.x) / (k2 - k1);
				y = (point1.x * k2 - point2.x * k1) / (k2 - k1);
				trace("Прямые пересекаются в точке [" + x + ";" + y + "]");
				return new Point(x, y);
			}
 
		}
 
		private function toRadians(degrees:Number):Number
		{
			return degrees * (Math.PI / 180);
		}
	}
 
}
В данном коде нет проверки на принадлежность найденной точки заданным лучам - это Вам остается как домашнее задание )


Последний раз редактировалось Ookami; 17.11.2011 в 01:56.
Старый 17.11.2011, 09:29
leo150 вне форума Посмотреть профиль Отправить личное сообщение для leo150 Найти все сообщения от leo150
  № 14  
Ответить с цитированием
leo150
[+3 17.03.11]

Регистрация: Feb 2011
Сообщений: 27
в моей задаче лучи всегда пересекаются
спасибо!

Старый 17.11.2011, 11:24
feelgood66 вне форума Посмотреть профиль Отправить личное сообщение для feelgood66 Найти все сообщения от feelgood66
  № 15  
Ответить с цитированием
feelgood66
[+1 15.11.10]

Регистрация: Jun 2005
Сообщений: 25
еще перед поиском пересечения неплохо проверить лучи на взаимную паралельность. А то при подсчете может случится деление на ноль. Это раз. А уж если это лучи... то даже пре их непаралельности они иногда не могут пересечься. Это тоже надо как-то проверять

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

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
Сообщение от Ookami
...
А, да, перед вычислениями было бы еще неплохо проверить что а1 != а2, иначе деление на ноль возникнет (прямые/лучи параллельны)
...
Но т.к. это точка пересечения двух прямых, а не лучей (помним в чем разница, да?) то надо проверить принадлженость этой точки каждому из лучей.
...
Как-то так ) Писали уже об этом

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

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

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


 


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


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