Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 20.03.2014
Сообщений: 2
1

Найти точки образующие замкнутый контур плоскости

20.03.2014, 15:40. Показов 1002. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На плоскости находятся точки. Используя под-программу найти те точки, образующие замкнутый контур этой плоскости.

У меня есть код, но он выдает только одну нужную точку и все. Не знаю что делать.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var x0,x1,x2,y0,y1,y2,i,j,u,n,k1,k2: integer; 
x: array [1..20] of integer;
y: array [1..20] of integer;
xx: array [1..20] of integer;
yy: array [1..20] of integer;
 
procedure lin(x0,x1,x2,y0,y1,y2,n,k1,k2: integer);
var f,i:integer;
begin
  f:=(y1-y1)*x0+(x2-x1)*y0+(x1*y2-x2*y1);
  if f < 0 then inc (k1);
  if f > 0 then inc (k2);
end;
 
begin
  writeln('Введите количество точок на плоскости');
  readln(n);
  for i:= 1 to n do
  begin
    x[i]:= random(10);
    y[i]:= random(10);
  end;
  for j:= 1 to n do
  writeln('(',x[j],';',y[j],')');
  writeln('Точки, что образуют замкнутый контур плоскости');
  for j:=i to n do
  begin
    x1:=x[j];
    y1:=y[j];
    for u:= 1 to n do
      x2:=x[u];
      y2:=x[u];
      for i:= 1 to n do
      begin
        x0:=x[i];
        y0:=x[i];
        lin(x0,x1,x2,y0,y1,y2,n,k1,k2);
      end;
      if (k1 = 0) or (k2 = 0) then
      begin
        xx[j]:= x[j];
        yy[j]:= y[j];
      end;
  end;
  for j:= 1 to n do
  writeln('(',xx[j],';',yy[j],')');
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2014, 15:40
Ответы с готовыми решениями:

На плоскости находятся точки. Найти те точки, образующие замкнутый контур этого множества
На плоскости находятся точки . Используя вспомогательную программу найти те точки , образующие...

Замкнутый контур, найти напряжение
Помогите, пожалуйста решить задачу. Сам вообще не знаю как подкопаться. Правила Кирхгофа прошли, с...

Из множества точек на плоскости найти точки, образующие параллелограмм с наибольшим количеством точек внутри
&quot;Даны N точек на плоскости. Найти среди них точки являющиеся вершинами фигуры, содержащей...

Замкнутый контур. Напряжения в цепи
Доброго дня суток. Нужна помощь в решении этой задачи: Правила форума: 4.3. Создавайте темы с...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.03.2014, 16:01 2
Цитата Сообщение от Tanirra Посмотреть сообщение
точки, образующие замкнутый контур этой плоскости
- это часом не построение выпуклой оболочки? Так тут на форуме полно решений.

Найти выпуклую оболочку множества
Построить выпуклый многоугольник, вершины которого — заданные точки
, поиск по ключевым словам выдаст еще...
0
0 / 0 / 1
Регистрация: 20.03.2014
Сообщений: 2
08.04.2014, 12:44  [ТС] 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const armax=100;
var x,y,x1,y1:array[1..armax] of integer; i,j,n,k,gd,gm:integer; max_it:real;
function it(x1,y1,x2,y2,x3,y3:integer):real;
var l1,l2,l3,cosx:real;
begin
  l1:=sqrt(sqr(x2-x1)+sqr(y2-y1));
  l2:=sqrt(sqr(x3-x2)+sqr(y3-y2));
  l3:=sqrt(sqr(x3-x1)+sqr(y3-y1));
  cosx:=(l1*l1+l2*l2-l3*l3)/(2*l1*l2);
  it:=arccos(cosx);
end;
begin
 writeln('Количество точек:');
 read(n);
 j:=2;
 max_it:=0;
 for i:=1 to n do
    begin
      writeln('x[',i,']');
      read(x[i]);
      writeln('y[',i,']');
      read(y[i]);
    end;
 y1[1]:=y[1];
 x1[1]:=x[1];
  for i:=1 to n do
        begin
         if y[i]<y1[1] then begin y1[1]:=y[i]; x1[1]:=x[i]; end
         else if (y[i]=y1[1]) and (x[i]>x1[1]) then
                begin
                  y1[1]:=y[i]; x1[1]:=x[i];
                end;
        end;
  for i:=1 to n do
        begin
         if (x1[1]<>x[i]) and (y1[1]<>y[i]) then if (it((x1[1]-3),y1[1],x1[1],y1[1],x[i],y[i])>max_it) then
           begin
              max_it:=it((x1[1]-3),y1[1],x1[1],y1[1],x[i],y[i]);
              x1[2]:=x[i];
              y1[2]:=y[i];
           end;
        end;
  repeat
    inc(j);
    max_it:=0;
    for i:=1 to n do
        begin
          if ((x1[j-2]=x[i]) and (y1[j-2]=y[i])) or
             ((x1[j-1]=x[i]) and (y1[j-1]=y[i])) then continue
          else
           begin
            if (it(x1[j-2],y1[j-2],x1[j-1],y1[j-1],x[i],y[i])>max_it) then
               begin
                 max_it:=it(x1[j-2],y1[j-2],x1[j-1],y1[j-1],x[i],y[i]);
                 x1[j]:=x[i];
                 y1[j]:=y[i];
               end;
           end;
        end;
  until (x1[j]=x1[1]) and (y1[j]=y1[1]);
  writeln('Оболочка идет через точки:');
  for i:=1 to j-1 do writeln('x[',i,']=',x1[i],'   ','y[',i,']=',y1[i]);
end.
0
08.04.2014, 12:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2014, 12:44
Помогаю со студенческими работами здесь

Как задать криволинейный замкнутый контур по точкам методом кубической интерполяции?
В с++ я новичок, полазив по форумам, я нашел некотрые коды, но они либо не работают, либо выдают не...

Найти три точки, образующие треугольник минимальной площади
Помогите пожалуйста, задание звучит так: Найдите три точки, образующие треугольник минимальной...

Найти три точки из заданного множества, образующие треугольник наибольшего периметра
В пространстве найти три различные точки из заданного множества точек, образующих треугольник...

Найти уравнение плоскости, проходящей через точки и перпендикулярной к плоскости XOY
Найти уравнение плоскости, проходящей через точки M(1;-1;2),N(3;1;-2) и перпендикулярной к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru