Показать сообщение отдельно
Старый 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.