С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 18

Создают ли точки плоскости выпуклый многоугольник

20.03.2016, 18:51. Показов 4262. Ответов 3
Метки нет (Все метки)

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

Добавлено через 5 часов 11 минут
Помогите. Это срочно. Вопрос жизни и отчисления
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2016, 18:51
Ответы с готовыми решениями:

Построить выпуклый многоугольник, вершины которого — заданные точки
Подскажите,пожалуйста,как решается такая задача: дано множество точек, построить выпуклый многоугольник, вершины которого - заданные...

Выпуклый многоугольник.
Добрый вечер. Подскажите, пожалуйста, как математически определить выпуклость многоугольника, если даны координаты точек. Может можете...

Определить, образуют ли точки выпуклый четырехугольник
люди помогите решить задачу Даны координаты четырех точек (x1,y1), (x2,y2), (x3,y3), (x4,y4). Необходимо определить, образуют ли...

3
Модератор
10396 / 5684 / 3399
Регистрация: 17.08.2012
Сообщений: 17,327
22.03.2016, 23:16
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Во-первых: Выпуклый многоугольник., особенно первая ссылка по этой ссылке.

Программу по ссылке, если хотите, можете использовать, но моё мнение такое: написано много, с подпрограммами, с булевыми переменными. Прям аж глаза разбегаются. Я всегда подозреваю, что, если написано много, то написано наверняка неверно. Попробуем немножко упростить реализацию алгоритма, заодно и адаптировать эту реализацию под Ваше задание. Ну и, чтобы Вам удалось это задание сдать, программу попытаюсь написать пусть не оптимально, но зато попроще.

Есть такая мысль. Очевидно, что, если просуммировать знаки всех упомянутых векторных произведений для n вершин (+1: произведение > 0, -1: произведение < 0, 0: произведение = 0), то, если все произведения одного знака (выпуклый), в результате должно получиться либо +n, либо -n. То есть, модуль суммы знаков векторного произведения в случае выпуклого многоугольника будет равна количеству вершин. Вот и отлично.

Не будем вычислять отдельно координаты векторов, построенных на соседних сторонах, а вычислим нужное при вычислении векторного произведения. Для того, чтобы избавиться от свистопляски с соединением последней точки с первой (в программе по ссылке эта свистопляска есть, в виде кучи ненужных if-ов и неуклюжей путаницы в индексах), используем стек FIFO, построенный на трёх отдельных переменных (можно объединить в массив, но зачем?). На трёх, потому что для вычисления векторного произведения векторов, построенных на двух соседних сторонах, требуется три точки, а не четыре. Одна точка у соседних сторон общая. Вот что вышло:
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
const m = 100; {пусть максимально будет стоугольник}
 
var x, y: array [1..m] of real; {массивы координат по x и y}
    {счётчик, количество точек, сумма знаков векторного произведения, номера трёх текущих точек (стек LIFO)}
    i, n, q, t1, t2, t3: integer;
    vprod: real; {векторное произведение}
 
begin
  repeat {ввод количества вершин}
    write('Количество вершин в интервале [4..', m, ']: ');
    readln(n)
  until n in [4..m];
  {меньше 4 не имеет смысла, больше m=100 руки отсохнут иксы и игреки вводить}
  writeln('Введите координаты вершин в порядке их обхода по линии сторон:');
  for i := 1 to n do {ввод координат точек}
    begin
      write('x', i, ' = '); {по x}
      readln(x[i]);
      write('y', i, ' = '); {по y}
      readln(y[i])
    end;
  q := 0; {сумма знаков векторных произведений, пока равна 0}
  {предварительная установка номеров точек}
  t2 := n - 1; {номер второй точки}
  t3 := n; {номер третьей точки}
  for i := 1 to n do {вычисление суммы знаков векторного произведения}
    begin
      t1 := t2; {сдвигаем вторую точку на место первой}
      t2 := t3; {сдвигаем третью точку на место второй}
      t3 := i; {номер третьей точки}
      {вычисляем координаты векторов, построенных на 2, 1 и 3, 2 точках}
      {(это то, что в скобках), и находим величину векторного произведения (все остальные действия)}
      vprod := (x[t2] - x[t1]) * (y[t3] - y[t2]) - (x[t3] - x[t2]) * (y[t2] - y[t1]);
      if vprod > 0 {если векторное произведение положительно}
        then inc(q) {то сумма знаков +1}
        else if vprod < 0 {иначе, если векторное произведение отрицательно}
          then dec(q) {то сумма знаков -1}
      {а если векторное произведение равно 0, то ничего с суммой знаков не делаем}
      {это случай, когда три точки расположены на одной прямой,}
      {тогда многоугольник выпуклым считать не следует}
    end;
  write('Многоугольник ');
  {если все векторные произведения были одного знака, то сумма знаков}
  {будет либо +n, либо -n, то есть, абсолютная величина суммы знаков}
  {должна быть равна количеству вершин, тогда выпуклый}
  if abs(q) < n then write('не '); {если модуль суммы знаков меньше количества вершин, то не выпуклый}
  write('выпуклый.');
  readln
end.
Комментарии после изучения кода можете удалить, тогда программа будет выглядеть достаточно лаконично. Обязательно изучите материал по ссылке. Разберитесь с программой. Будут неясности, пишите.

Не по теме:

Цитата Сообщение от kiberLina Посмотреть сообщение
срочно
Как Вы могли допустить, чтобы возникла срочность? Почему, когда я учился, все успевали не только учиться, несмотря на болезни и пропуски лекций, так ещё и успевали вполне серьёзно заниматься спортом, ходить в походы, участвовать в общественной деятельности, а также пьянствовать, гульбанить и ухлёстывать за юными саламандрами? О юных саламандрах я вообще молчу. В плане всего вышеперечисленного, их было не догнать. За исключением последнего пункта. Вместо этого они, естественно, успевали принимать ухаживания заскорузлых крокодилов.

1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
23.03.2016, 08:31
Цитата Сообщение от kiberLina Посмотреть сообщение
Создают ли точки плоскости, координаты которых хранятся в двух массивах, выпуклый многоугольник.
Вот практически никогда не видел в заданиях что координаты вводятся в порядке обхода, хотя без этого условия решение значительно усложняется.
0
Модератор
10396 / 5684 / 3399
Регистрация: 17.08.2012
Сообщений: 17,327
23.03.2016, 13:49
Простой здраый смысл. Порядок обхода должен быть определён, иначе задача некорректна. Мало ли какой многоугольник можно составить из более чем 4 вершин. Ну да, конечно... Сначала попытаться расставить точки так, чтобы, хотя бы в первом приближении, они образовали выпуклый многоугольник. Однако, это всего лишь один из способов задания порядка обхода вершин. В данной задаче не ставится проблема построения максимально выпуклой оболочки из заданных точек, ведь так? И вот что я думаю... Получается, какие-то дополнительные условия - это мы всё сами придумываем из-за того, что нечем заполнить пустоту некорректности и неполноты поставленной задачи...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2016, 13:49
Помогаю со студенческими работами здесь

Подпрограммы. Для точки на плоскости найти расстояние от точки до начала координат
Для точки на плоскости с заданными координатами (x,y) найти расстояние l от точки до начала координат, а также длину окружности и площадь...

Найти расстояние от точки (x; y) на плоскости до ближайшей точки единичного круга - Pascal ABC
Прошу помочь разобраться в данной теме. Как вообще решать данного типа задачи? Даны координаты точки на плоскости (x; y). Надо найти...

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru