Заданы уравнения трех кривых на плоскости. Одно из уравнений содержит переменный коэффициент 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
Заранее ОГРОМНОЕ сПаСиБо
Если не сложно, обозначь свой мыльник....
Я бы предложил метод сканирующей линии. Через точку Ti проводишь вертикальную и горизонтальную линию. Затем ещёшь кол-во точек пересечения левее этой точки и выше. Если оба числа нечётные, то точка должна лежать внутри фигуры.
Во-первых, вопрос: что, тема за год не перестала быть актуальной? Эту задачу за год никто не решил? А может, просто не пытались?
Ну и по теме:
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.
а что должно быть на месте ваших { ... }?