Помощь - Поиск - Пользователи - Календарь
Полная версия: Попадание точек в область, ограниченную тремя лини
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
GORBUNKI
Заданы уравнения трех кривых на плоскости. Одно из уравнений содержит переменный коэффициент 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
Если не сложно, обозначь свой мыльник....
BlackShadow
Я бы предложил метод сканирующей линии. Через точку Ti проводишь вертикальную и горизонтальную линию. Затем ещёшь кол-во точек пересечения левее этой точки и выше. Если оба числа нечётные, то точка должна лежать внутри фигуры.
Nita
Код
Все равно не могу ни чего понять. я даже математически понять эту задачу понять не могу.
volvo
Во-первых, вопрос: что, тема за год не перестала быть актуальной? Эту задачу за год никто не решил? А может, просто не пытались?

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

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

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.
безымянный
а что должно быть на месте ваших { ... }? wacko.gif blink.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.