Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
115 / 36 / 3
Регистрация: 13.12.2009
Сообщений: 223
1

Построение выпуклой оболочки множества точек

31.07.2010, 09:51. Показов 3637. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано множество точек на плоскости. построить выпуклую оболочку этого мно-
жества.
какой тут алгорттм?помогите кому не трудно)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2010, 09:51
Ответы с готовыми решениями:

Задача на построение выпуклой оболочки
Вот задача: на плоскости задано N точек, которые пронумерованы слева на право (а при равных...

Построение выпуклой оболочки обходом Грэхэма
Привет всем! помогите написать на java этот алгоритм Построение выпуклой оболочки обходом Грэхэма...

Построение выпуклой оболочки по Грехему и Джарвису
Добрый день, есть у кого реализация построения выпуклой оболочки по Грехему и Джарвису, буду...

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

7
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
31.07.2010, 10:03 2
Для начала, точки с минимальными и максимальными X и Y задают прямоугольник. Затем, соединяя отрезком две соседние, находим нужные точки над/под отрезком.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.07.2010, 10:05 3
Вообще-то алгоритмов несколько и все они детально описаны.
http://www.google.ru/search?hl... ql=&oq=пос
Например такой.

Выпуклая оболочка множества точек - минимальный многоугольник, который содежит все точки данного множества.
Алгоритм решения задачи: скажем, что начальная вершина V = V0 - самая нижняя (если таких несколько, то самая правая). Выберем произвольную ось (допустим, параллельную оси ОХ и идущую через первую вершину). Для каждой вершины T найдем углы между осью ОХ и отрезком VT. Выберем наименьший такой угол (углы считаются против часовой стрекли с "3 часов"). Выведем вершину T. Теперь присвоим V = T. Когда T = V0 - алгоритм заканчивается.
Примерный код на Паскале
выпуклая оболочка
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
type
  TPoint = record
    x,y: Integer;
  end;
 
const
  MaxN = 400;
 
var
  N: Integer;
  i: Integer;
  P: array [1..MaxN] of TPoint;     { Точки множества }
  Used: array [1..MaxN] of Boolean;
 
  First,Point,NewPoint: Integer;
 
  procedure WritePoint(i: Integer);
  begin
    Writeln('[',i:3,'] (',P[i].x, ';', P[i].y, ')');
  end;
 
  function Bigger(P,P1,P2: TPoint): Boolean;
  begin
    Bigger := (P1.x - P.x) * (P2.y - P.y) - (P1.y - P.y) * (P2.x - P.x) > 0;
  end;
 
begin
  assign(input,'input.txt'); reset(input);
  Readln(N);
 
  First:=1;
  for i:=1 to N do begin
    Readln(P[i].x, P[i].y);
    if (P[i].y < P[First].y) then First:=i else
    if (P[i].y = P[First].y) and (P[i].x < P[First].x) then First:=i;
  end;
  close(input);
 
  FillChar(Used,SizeOf(Used),False);
 
  Writeln('Выпуклая оболочка идет через вершины: ');
 
  Point:=First;
 
  repeat
    WritePoint(Point); Used[Point]:=True;
    NewPoint:=0;
 
    { Поиск следующей вершины }
    for i:=1 to N do
      if i <> Point then begin
        if (NewPoint = 0) or (Bigger(P[Point], P[i], P[NewPoint]))
          then NewPoint:=i;
      end;
 
    Point:=NewPoint;
  until Point = First;
 
end.
0
115 / 36 / 3
Регистрация: 13.12.2009
Сообщений: 223
31.07.2010, 10:10  [ТС] 4
а если при нахождения угла получится так что надо делить на 0 тогда что делать?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.07.2010, 10:16 5
genius5, В приведенном алгоритме деления нет, а вообще чтобы избежать таких случаев, делают проверку на параллельность и перпендикулярность, тоже эти проверки везде написаны.
0
115 / 36 / 3
Регистрация: 13.12.2009
Сообщений: 223
31.07.2010, 10:18  [ТС] 6
а на С эеа прога есть?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.07.2010, 10:21 7
genius5, Та и пиши в Си, а не в алгоритмы...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
31.07.2010, 10:32 8
genius5, http://e-maxx.ru/algo/convex_hull_graham
0
31.07.2010, 10:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2010, 10:32
Помогаю со студенческими работами здесь

Нахождение выпуклой оболочки (3D)
Здравствуйте, может на этом форуме кто-нибудь сможет помочь. Мне завтра надо сдавать лабораторную,...

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

Определение выпуклой оболочки по методу Джарвиса
помогите мне написать программу плиз) желательно до четверга и обязательно на бейсике

Реализовать алгоритмы для построения выпуклой оболочки.
Добрый день, необходимо реализовать некоторые алгоритмы для построения выпуклой оболочки. Решил...


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

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