Помощь - Поиск - Пользователи - Календарь
Полная версия: Геомеьрическая задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Uriah
На плоскости заданы множество точек и прямая. Определить точку, ближайшую к прямой, из точек, лежащих выше прямой, и точку ближайшую к прямой, из точек, лежащих ниже.

Метод решения:
Пусть прямая задана уравнением ax+by+c=0, где a,b,c – коэффициенты в уравнении, входные данные, вещественные числа.
n – количество точек множества, входные данные, целое число.
(xi,yi)│i=1..n ─ координаты множества точек, входные данные, вещественные числа.
l ─ расстояния от заданной прямой до точек прямой, промежуточные данные, вещественные число
Ввод a,b,c.
Ввод n.
Для i от 1 до n вводим координаты точек множества (xi,yi), где i изменяется на единицу (i = i+1).
При (a*a+b*b)>0, находим расстояния от прямой до заданных точек:
l = (a*xi+b*yi+c)/sqrt(a*a+b*b)
Если (a*xi+b*yi+c)>0, то точка находится выше прямой, и тогда определяем какая точка находится ближе к прямой, путём сравнения расстояний от прямой до точек.
Выводим координаты точки ближайшей к прямой из точек, лежащих выше неё.
Если (a*xi+b*yi+c)<0, то точка находится ниже прямой, и тогда определяем какая точка находится ближе к прямой, путём сравнения расстояний от прямой до точек.
Выводим координаты точки ближайшей к прямой из точек, лежащих ниже неё.


Часть проги я написал: задал множество точек и нашёл расстояния от них до прямой,
необходимо токо кусок чтобы определить точку, ближайшую к прямой, из точек, лежащих выше прямой, и точку ближайшую к прямой, из точек, лежащих ниже. ПОМОГИТЕ, ктонить, ПОЖАЛУЙСТА!!!!!!!!! заранее БЛАГОДАРЕН!
мисс_граффити
для начала, приведи код уже написанного тобой.
а если прямая вертикальная - как считать "выше" и "ниже"?
Гость
Цитата(мисс_граффити @ 8.10.2006 13:19) *

для начала, приведи код уже написанного тобой.
а если прямая вертикальная - как считать "выше" и "ниже"?


я в задал условие, что (a*a+b*b)<>0
Гость
вот часть исходника:

Код
program Mnogestvo;
uses Crt;
const n=5;
var a,b,c:real; i:integer;
      X: array [1..n] of real;
      Y: array [1..n] of real;
      l: real;
begin
ClrScr;
writeln ('Введите a,b,c');
readln (a,b,c);
for i:=1 to n do
begin
writeln ('Введите координаты', ' ', i, '-й точки множества');
readln (X[i],Y[i]);
end;
for i:=1 to n do
begin
if (a*a+b*b)<>0 then
l:= (a*X[i]+b*Y[i]+c)/sqrt (a*a+b*b);
writeln (l);
end;





readkey;
end.
-Uriah-
Никто помочь не может?
Uriah
Подскажите хоть, пожалуйста, допустим я определ ближайшие расстояния до прямой, как мне обратно вівести координаты этих ближайших точек !low.gif
volvo
Цитата
как мне обратно вівести координаты этих ближайших точек
Ты же запоминаешь точки в массиве?

Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)...

А потом по запомненным индексам просто вытянешь из массива сами точки...
Uriah
Цитата(volvo @ 13.10.2006 17:37) *

Ты же запоминаешь точки в массиве?

Вот и находи два индекса: один - индекс точки с минимальным "положительным" расстоянием (это ближайшая сверху точка), а второй - индекс точки с минимальным "отрицательным" расстоянием (ближайшая снизу точка)...

А потом по запомненным индексам просто вытянешь из массива сами точки...

я запоминаю точки в двух одномерных массивах x,y

и мне надо использовать l без индекса
volvo
Тогда во-первых, объясни почему без индекса? Чтоб самому себе найти проблемы, а потом долго и упорно их решать?

А во-вторых, приведи, наконец программу (ПОЛНОСТЬЮ, а не отрывок из несущественностей, типа организации ввода), которую до сих пор сделал... Почему все считают, что кто-то должен повторить то же самое, что они уже наваяли? dry.gif КОМУ нужна помощь, наконец???
Uriah
l я взял сначала с индексом, но мой препод сказал исправить, чтоб было без него, говорит, что так прога занимает больше места, хотя я и не знаю как это организовать
volvo
А у тебя в задании что, где-то приведены ограничения по "занимаемому месту"? Я этого не нашел...

Извини, но используя ТОЛЬКО два одномерных массива и одну переменную, ты эту задачу НЕ решишь... По крайней мере еще или 6 переменных (4 для хранения координат (X, Y) точки с минимальным расстоянием "над прямой"/"под прямой" и 2 - для сохранения самого мин. значения тоже "над"/"под"), или индексы.

Насчет "занимает больше места" - ты что, ОБЕ программы ему показывал, и он сравнил размеры? Откуда он знает, ЧТО БУДЕТ занимать больше места? Он что, провидец?
Uriah
я учусь в инсте на программиста(1 курс). первая лаба была на разработку методов решения задачи, и я использовал l[i], и за это препод снял почти половину балов

за нерациональное решение задачи
Uriah
с переменной ничего не получается, а вот с массивом - всё класс!
Uriah
посмотрите пожалуйста прогу, она постоянно выбивает последнюю точку, не смотря на полученные расстояния. я делал прогу только для точек лежащих выше



Код
program Mnogestvo;
uses Crt;
const n=5;
var a,b,c:real; i:integer;
      X: array [1..n] of real;
      Y: array [1..n] of real;
      l: real;
begin
ClrScr;
writeln ('Введите a,b,c');
readln (a,b,c);
for i:=1 to n do
begin
writeln ('Введите координаты', ' ', i, '-й точки множества');
readln (X[i],Y[i]);
end;
for i:=1 to n do
begin
if (a*X[i]+b*Y[i]+c)>0
then l[i]:= a*X[i]+b*Y[i]+c;
end;
if l[i]>0 then
begin
for i:=1 to n do
begin
if (a*X[i+1]+b*Y[i+1]+c)<l[i] then
l[i]:= a*X[i+1]+b*Y[i+1]+c;
end;
writeln (l[i]);
writeln (i);
writeln (X[i],Y[i]);
end;


readkey;
end.
Uriah
помогите плиз
Uriah
не понимаю в чём ошибка
volvo
Цитата
не понимаю в чём ошибка
В том, что ты определил переменную L как Real, а пытаешься обратиться к ней - как к массиву. Поэтому программа и не компилируется...
Uriah
это я здесь при записи ошибся, а так она и записана как массив, а всё-равно не работает
volvo
А здесь должно быть то же самое, что и у тебя, иначе вся тема просто будет снесена напрочь, как переливание из пустого в порожнее. Нужна помощь - давай ПРАВИЛЬНЫЙ код. Не даешь - тему в мусор. Надоело уже сюсюкаться тут с такими как ты! mad.gif
Uriah
извините,пожалуйста.
Помогите плиз
Uriah
гляньте кто-нить прогу, пожалуйста, срочно надо
Гость
никто не может помочь?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.