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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.10.2012, 08:14
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 1  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
По умолчанию Принадлежит ли точка прямой

Здравствуйте.

Есть задача: у отрезка известны координаты конца и начала (могут быть любыми). Известны координаты некоторой точки.
Подскажите, как узнать принадлежит ли точка отрезку?
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
порт с С++
Код AS3:
package  {
	import flash.display.Sprite;
	import flash.geom.Point;
	/**
	 * ...
	 * @author casey ryan
	 */
 
	public class Main extends Sprite {
 
		private const EPSILON:Number = 0.001;
 
		public function Main() {
 
		}
		private function isPointOnLine(linePointA:Point, linePointB:Point, point:Point):Boolean {
		   var a:Number = (linePointB.y - linePointA.y) / (linePointB.x - linePointB.x);
		   var b:Number = linePointA.y - a * linePointA.x;
		   if ( Math.abs(point.y - (a * point.x + b)) < EPSILON) {
			   return true;
		   }
		   return false;
		}
	}
}
не проверял, но скорее всего сработает

Старый 15.10.2012, 10:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> но скорее всего сработает
для вертикальной точно не сработает

если с анализом нюансов не охота связываться, то можно таким 'шаманским' способом, типа пусть плеер сам и считает )
Код AS3:
public function Main():void
{
 
	trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(52, 50),1));//false
	trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(52, 50),10));//true
	trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(50, 50), 0));//true
}
 
private function isPointOnLine(linePointA:Point, linePointB:Point, point:Point, tol:Number=0):Boolean
{
	var tmp:Shape = new Shape();
	tmp.graphics.lineStyle(tol);
	tmp.graphics.moveTo(linePointA.x, linePointA.y);
	tmp.graphics.lineTo(linePointB.x, linePointB.y);
 
	addChild(tmp);
	var res:Boolean = tmp.hitTestPoint(point.x, point.y, true);
	removeChild(tmp);
	return res;
 
}

Старый 15.10.2012, 14:10
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Если уж пошли шаманские способы, то можно и так:
Код AS3:
private function isPointOnLine(a:Point, b:Point, c:Point):Boolean
{
    var distance:Number = Point.distance(a, c);
    var line:Point = b.substract(a);
    line.normalize(distance);
 
    return c.equals(line.add(a));
}
Только компенсацию погрешности добавить.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 15.10.2012, 17:22
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 5  
Ответить с цитированием
gagaga
[+1 22.04.13]
[+1 06.03.13]

Регистрация: Apr 2012
Сообщений: 239
1. составляете матрицу 3-о порядка из координат точек (в 3 столбике 1, т.к. у нас двумерное пространство)
2. находите определитель матрицы (детерминант)
3. сравниваете его с нулем
......
4. PROFIT

Старый 15.10.2012, 22:14
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 6  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
(y - y1)/(y2 - y1) = (x - x1)/(x2 - x1)

A(x1, y1) - начало отрезка
B(x2, y2) - конец отрезка
С(x, y) - проверяемая точка

подставляем. считаем =)

Старый 16.10.2012, 01:45
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Цитата:
Сообщение от Srednas Посмотреть сообщение
как узнать принадлежит ли точка отрезку?
Вот это вот в гугол вбить.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

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

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


 


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


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