Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Попадание точек в область, ограниченную тремя лини

Автор: GORBUNKI 21.04.2004 18:50

Заданы уравнения трех кривых на плоскости. Одно из уравнений содержит переменный коэффициент k. Кривые, пересекаясь, ограничивают замкнутую область D, размеры которой зависят от значения коэффициента k, который может быть задан одним из двух способов:

1) задано начальное значение k нач , конечное значение k кон и шаг изменения k;

2) заданы k нач. , k кон. и набор из n произвольных значений коэффициента, n не более 10 (k нач. меньше k кон. )
Мой способ (2)

На той же плоскости заданы декартовы координаты точек, образующих множество М (координаты задаются произвольно, n не больше 20).

Для каждого из заданных значений k сформировать P - подмножество M, содержащее точки, которые находятся внутри замкнутой области D.

Уравнения линий: y=ln(x-0,25)
y=0,2x-k
x*x/0,25-y*y/1,21=1
k нач = 0,1 k кон = 0,5

Заранее ОГРОМНОЕ сПаСиБо

Автор: Stream 23.06.2004 10:19

Если не сложно, обозначь свой мыльник....

Автор: BlackShadow 23.06.2004 15:01

Я бы предложил метод сканирующей линии. Через точку Ti проводишь вертикальную и горизонтальную линию. Затем ещёшь кол-во точек пересечения левее этой точки и выше. Если оба числа нечётные, то точка должна лежать внутри фигуры.

Автор: Nita 27.04.2005 15:19

Код
Все равно не могу ни чего понять. я даже математически понять эту задачу понять не могу.

Автор: volvo 27.04.2005 15:48

Во-первых, вопрос: что, тема за год не перестала быть актуальной? Эту задачу за год никто не решил? А может, просто не пытались?

Ну и по теме:

Цитата
я даже математически понять эту задачу понять не могу

я надеюсь, этот алгоритм поможет понять что из себя представляет данная задача?

const
n_max = 20;
k_max = 10;
type
tpoint = record
x, y: integer;
end;
tparray = array[1 .. n_max] of tpoint;

{ вот эта функция и должна определить, находится ли точка P
внутри фигуры, образованной заданными кривыми при текущем значении K }
function is_inside(p: tpoint; k: real): boolean;
begin
{ ... }
end;

var
points: tparray;
sub_set: array[1 .. k_max] of tparray;

n, curr_k, curr_n: integer;
k: real;

begin
k := 0.1; curr_k := 1;
{ перебираем все возможные значения K }
while k <= 0.5 do begin

curr_n := 1;
{ и для каждого из них - проверяем ВСЕ точки на попадание внутрь полигона }
for n := 1 to n_max do begin

{ если очередная точка внутри - то добавить ее к списку внутренних при текущем K }
if is_inside(points[n], k) then begin
sub_set[curr_k][curr_n] := points[n];
inc(curr_n)
end;

end;
k := k + 0.1; inc(curr_k)

end;

end.

Автор: безымянный 25.11.2007 20:31

а что должно быть на месте ваших { ... }? wacko.gif blink.gif