Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 11

Геометрическая задача. Объясните как работает (нужно описание алгоритма)

20.05.2014, 18:31. Показов 576. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Построить множество всех выпуклых четырехугольников с вершинами в заданном множестве точек на плоскости.

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
program convex_quadrilateral;
const MaxDotCount = 100;
type dot=record x,y:real; end;
var
   epsilon:real;
   space:array [0..MaxDotCount] of dot;
   dotCount:integer;
   a,b,c,d,count,i:integer;
 
function getY(const a,b,c:integer):real;
         begin
              getY:=(space[c].x * (space[b].y - space[a].y) + space[a].y * space[b].x -
              space[b].y * space[a].x) / (space[b].x - space[a].x);
         end;
 
function onOneLine(const a,b,c:integer):boolean;
         begin
              if (abs(space[a].x-space[b].x)<=epsilon) then 
                  begin
                       if (abs (space[b].x - space[c].x) <= epsilon) then
                          onOneLine:=true else onOneLine:=false; 
                       exit;
                  end                  
                  else if (abs(space[a].y-space[b].y)<=epsilon) then
                           begin
                                if (abs (space[b].y - space[c].y) <= epsilon) then
                                    onOneLine:=true else onOneLine:=false;
                                exit;
                           end                                
                           else if (abs (space[c].y - getY (a, b, c)) <= epsilon) then
                                    onOneLine:=true
                                    else onOneLine:=false;
         end;
function diagonalRule(const a1,a2,b1,b2:integer):boolean;
         var
            y1,y2:real;
         begin
              if abs(space[a1].x - space[a2].x)<= epsilon then 
                  begin
                        if ((space[a1].x - space[b1].x) * (space[a1].x - space[b2].x)) < 0 then
                            diagonalRule:=true else diagonalRule:=false; 
                        exit;                        
                  end                      
                 else if (abs (space[a1].y - space[a2].y) <= epsilon) then begin
                          y1:=space[a1].y;
                          y2:=space[a1].y;
                      end
                         else begin
                                   y1:= getY (a1, a2, b1);
                                   y2:= getY (a1, a2, b2);
                              end;
              if ((y1 - space[b1].y) * (y2 - space[b2].y)) < 0 then
                  diagonalRule:=true else diagonalRule:=false;
end;
begin
     write('Vedite tochnost vichislenii epsilon=');
     readln(epsilon);
     writeln('Vvedite kol-vo tochek');
     readln(dotCount);
     for i:=0 to dotCount-1 do begin
         write('Vvedite x[',i,'] y[',i,']');
         readln(space[i].x,space[i].y);
         end;
     writeln('Resultat');
         if (dotCount < 4) then
             writeln('Ne hvataet tochek,minimum 4')
             else begin
                       count:=0;
                       for a:=0 to dotCount - 4 do
                begin
                           for b:= a + 1 to dotCount - 3 do
                                begin
                                 for c:= b + 1 to dotCount - 2 do
                                        begin
                                         if onOneLine (a, b, c)= false then
                                                begin
                                                  for d:= c + 1 to dotCount-1 do
                                                        begin
                                                      if (diagonalRule (a, c, b, d)=true) and (diagonalRule (b, d, a, c)=true) then begin
                                                          count:=count+1;
                                                          writeln (count,':',a, b, c, d);                                                        
                                                          end
 
                                                          else if (diagonalRule (a, b, c, d)=true) and (diagonalRule (c, d, a, b)=true) then begin
                                                                   count:=count+1;
                                                                   writeln (count,':',a, c, b, d);
                                                                   end
                                                                   else if (diagonalRule (a, d, b, c)=true) and (diagonalRule (b, c, a, d)=true) then 
                                                                        begin
                                                                             count:=count+1;
                                                                             writeln(count,':',a, b, d, c);
                                                                        end; 
                                                        end;
                                                end;
                                        end;
                                end;                                                                         
                end;
                      if count = 0 then 
                         writeln ('Net Vipuklih');
     end;
     writeln ('Nazhmite lubuu klavishu');
     readln;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2014, 18:31
Ответы с готовыми решениями:

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

Нужно описание алгоритма Range tree
Доброе время суток.. столкнулся с задачей изучение алгоритма Range tree .. в поиске информации успехов не дали.. может кто посоветует...

Telnet NTLM Authentication. Нужно описание. Как работает этот тип аутентификации?
Не смог найти ничего по telnet ntlm типе аутентификации. В rfc к telnet протоколу написано, что ntlm не входит в стандарты интернета. Есть...

2
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 11
24.05.2014, 12:25  [ТС]
Точнее интересует, что конкретно считает функция GetY
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
24.05.2014, 13:32
Задай этот вопрос в разделе Математика или Геометрия, сформулировав его так
есть 3 точки (x1,y1);(x2,y2);(x3,y3);
что вычисляет такая формула?
Y:=(x3*(y2-y1)+y1*x2-y2*x1)/(x2-x1);
Здесь вряд ли ответят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.05.2014, 13:32
Помогаю со студенческими работами здесь

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

Геометрическая задача
Здравствуйте, помогите решить задачку на геометрическую вероятность. Какова вероятность, что для 3х произвольных чисел, по модулю не...

Геометрическая задача
записать уравнение кривых, обладающих следующим свойством:отрезок оси абсцисс, отсекаемый касательной и нормалью проведенными из...

Геометрическая задача на С
Из заданного множества точек на плоскости выбрать три разные точки A, B и C так, чтобы внутри треугольника ABC содержалось максимальное...

Геометрическая задача
Дан квадрат (длина стороны и координаты левого верхнего угла) и треугольник (координаты вершин). Определить, находится ли треугольник...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru