Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2009, 14:15   #1
VictorS
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 13
По умолчанию Расстояние

Нужно найти расстояние от точки, заданок координатами (x; y) к отрезку заданого координатами или коефициентами уравнения прямой (a,b,c)
Я делал так:
Код:
a := y1-y2;
b := x2-x1;
c := -(x1*a+y1*b);
d := abs((a*x+b*y+c)/sqrt(sqr(a)+sqr(b)));
Нотакой метод даёт неверный ответпри таком (для примера):
координаты отрезка:
x1=-1 y1=1
x2=1 y2=1
точка
x= -4 y=-3
Відет 4, верно 5, подскажыте как модна сделать по другомй. Благодарю.

Последний раз редактировалось MaTBeu; 26.06.2009 в 18:40.
VictorS вне форума Ответить с цитированием
Старый 26.06.2009, 17:14   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
координаты отрезка:
x1=-1 y1=1
x2=1 y2=1
Это отрезок паралельный оси Y. расстояние от заданой точки до оси X - 3, И расстояние от оси до отрезка 1. Следовательно, для расстояния от ит точки до прямой, заданной координатами двух точек, верный ответ 1+3=4, а не 5 и чтобы определить расстояние до отрезка, необходимо также учитывать расположение точки относительно концов отрезка. Если проекция точки на прямую не попадает между точек, задающих концы отрезка, то за расстояние до отрезка необходимо брать меньшее значение из расстояний от точки до концов отрезка.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 26.06.2009 в 17:22.
Anatole вне форума Ответить с цитированием
Старый 27.06.2009, 12:43   #3
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Код:

struct Point{
	int x , y;
};

...

double len(Point a , Point b){
	return sqrt(pow((double)a.x - b.x , 2) + pow((double)a.y - b.y , 2));
}

//----------------------------------------------------------------------------------------


double getAngle(Point a , Point b , Point c){
   double sp;
   double abx , aby , bcx , bcy;
   abx = b.x - a.x;
   aby = b.y - a.y;
   bcx = c.x - a.x;
   bcy = c.y - a.y;
   sp = (abx * bcx + aby * bcy);
   return sp;
}

//----------------------------------------------------------------------------------------

double mn(double a , double b){
	return a > b ? b : a;
}

//----------------------------------------------------------------------------------------

double dist(Point p , Point p1 , Point p2){
	if (getAngle (p1 ,  p , p2) >= 0 &&  getAngle (p2 , p , p1) >= 0)
	    return fabs((double)(p.x - p1.x) * (p2.y - p1.y) - (p.y - p1.y) * (p2.x - p1.x)) / len(p1 , p2);
	else{
		return mn(len(p , p1) , len(p , p2));		
	}
}
Чтобы найти расстояние до прямой, а не отрезка, с помощью приведенного выше кода, нужно просто взять какие-нибудь две точки на прямой и задействовать код только из ветки if, но не из else.

См. также algolist.manual.ru

Последний раз редактировалось megachuhancer; 27.06.2009 в 12:55.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расстояние между абзацами в CSS Андрей79 HTML и CSS 4 13.04.2009 09:59
max расстояние между плоскими телами! Flanker13 Общие вопросы Delphi 3 17.03.2009 13:46
Расстояние точки до поверхности Mikhail Bakurov Общие вопросы Delphi 9 20.01.2009 23:05
Расстояние между 2 городами Uli9 Помощь студентам 1 06.12.2008 22:40
Расстояние от A до B... Apollo_13 Общие вопросы Delphi 4 25.06.2007 08:25