Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/75: Рейтинг темы: голосов - 75, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 17.11.2018
Сообщений: 6

Построить четырехугольник с заданными сторонами

03.04.2019, 21:21. Показов 14143. Ответов 23

Author24 — интернет-сервис помощи студентам
Решить задачу и используя функции класса TСanvas нарисовать соответствующую геометрическую фигуру. Даны четыре числа а, b, с, d. Необходимо определить, существует ли четырехугольник с такими длинами сторон.
В общем условие существования я то проверил, но сложности возникли с нахождением координат и построением. Препод сказал,что вроде можно одну координату задать или за (0;0) обозначить.
Помогите хотя-бы объяснением на словах.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2019, 21:21
Ответы с готовыми решениями:

Построить четырехугольник
На координатной плоскости генерируется задаваемое пользователем количество К =4..26 случайных точек. Найти самую высшую, низшую, левую и...

Выяснить, можно ли построить прямоугольный треугольник со сторонами K, L, M
Дано натуральное трехзначное число. Найти цифры этого числа K, L, M и выяснить, можно ли построить прямоугольный треугольник со сторонами...

Задан треугольник тремя сторонами A, B и C. Построить программу вычисления его углов в градусах.
Помогите пожалуйста. Знаю, что задание простое, но путаюсь в математических условиях. Задание: Задан треугольник тремя сторонами A, B...

23
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
03.04.2019, 21:27
Лучший ответ Сообщение было отмечено cntrcltre как решение

Решение

не хватает половины данных для построения, да и для првоерки тоже... надо либо 4 коордианты вершин(8 значений), либо длины сторон + углы, по данным 4 числам (этим длинам) можно только построить точки на числовой оси и ничего адекватного больше
1
0 / 0 / 0
Регистрация: 17.11.2018
Сообщений: 6
03.04.2019, 21:33  [ТС]
Я это и так знаю. Если бы всё это было дано, то я бы сделал без проблем. Подходил с этим вопросом к преподу,он сам толком не знает, только плечами пожимает и говорит, что такой идиотский вариант попался. Но мне то нужно сдать. Мы с ним пытались что-то думать, но в итоге всё скатывается в задачу, которую я даже на листе толком то решить не могу.
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
03.04.2019, 21:49
Цитата Сообщение от cntrcltre Посмотреть сообщение
Я это и так знаю. Если бы всё это было дано, то я бы сделал без проблем. Подходил с этим вопросом к преподу,он сам толком не знает, только плечами пожимает и говорит, что такой идиотский вариант попался. Но мне то нужно сдать. Мы с ним пытались что-то думать, но в итоге всё скатывается в задачу, которую я даже на листе толком то решить не могу.
это шутка такая??? препод курит чота с вами на уроках?)) дайте тоже попробовать)))

а как сдать если препод не знает, как он проверять будет?))))) я ф шоке .. ппц.. а мы то чем поможем решить?))) физику и математику перевернем и научимся строить по длинам сторон фигуры не имея дополнительных данных... только меня смущает вот чо
Цитата Сообщение от cntrcltre Посмотреть сообщение
В общем условие существования я то проверил
покажи!

Добавлено через 11 минут

вот как раз даже уже моя недавно начатая программа может проилюстрировать ...
вот посмотри, что такое четырехугольник... и что можно с 4 длинами сделать, можешь преподу показать наглядность
0
0 / 0 / 0
Регистрация: 17.11.2018
Сообщений: 6
03.04.2019, 21:57  [ТС]
Писал на паре, ничего не сохранял. Я просто сравнивал каждую сторону с суммой трех оставшихся.
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
03.04.2019, 22:30
Цитата Сообщение от cntrcltre Посмотреть сообщение
Я просто сравнивал каждую сторону с суммой трех оставшихся.
Мне кажется надо сравнивать только одну сторону, самую длинную.
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
03.04.2019, 22:47
Цитата Сообщение от Rayvenor Посмотреть сообщение
Мне кажется надо сравнивать только одну сторону, самую длинную.
и что это даст?
ну пусть у нас будет 2 3 4 5 длины сторон, что из этого можно сделать? Я ничего не могу сделать)) потому что тут бесконечное количество прямых/ треугольников/ четырехугольников, если длины могли бы быть нулями то еще и точку можно описать этими длинами, надо либо углы еще, либо пару точек, сейчас у нас 4 уравнения можно составить с 8 неизвестными, система решения не имеет на данный момент как-бэ
0
0 / 0 / 0
Регистрация: 17.11.2018
Сообщений: 6
03.04.2019, 22:53  [ТС]
Ладно,спасибо.
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 01:42
Цитата Сообщение от Arcor Посмотреть сообщение
и что это даст?
Это даст ответ на вопрос:
Цитата Сообщение от cntrcltre Посмотреть сообщение
существует ли четырехугольник с такими длинами сторон
Цитата Сообщение от Arcor Посмотреть сообщение
система решения не имеет на данный момент
Разве? По-моему, система имеет бесконечное количество решений. Рисуем любое возможное решение - это не противоречит условию задачи.
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 09:42
Цитата Сообщение от Rayvenor Посмотреть сообщение
существует ли четырехугольник с такими длинами сторон
я хочу наглядное решение сего видеть, взаимосвязь как минимум

Цитата Сообщение от Rayvenor Посмотреть сообщение
Разве? По-моему, система имеет бесконечное количество решений
Цитата Сообщение от Arcor Посмотреть сообщение
ну пусть у нас будет 2 3 4 5 длины сторон, что из этого можно сделать? Я ничего не могу сделать)) потому что тут бесконечное количество прямых/ треугольников/ четырехугольников, если длины могли бы быть нулями то еще и точку можно описать этими длинами
Цитата Сообщение от Arcor Посмотреть сообщение
либо пару точек, сейчас у нас 4 уравнения можно составить с 8 неизвестными, система решения не имеет на данный момент как-бэ
однозначного решения... ну написано же

Цитата Сообщение от Rayvenor Посмотреть сообщение
Рисуем любое возможное решение - это не противоречит условию задачи
при этом отсеивайте точки/ прямые /треугольники из возможного решения... НО при этом учитывая, что длины сторон изменяться не могут ни коим образом, т.е. берем одну линию, к ней присандаливаем вторую, под произвольным углом, далее ко второй третью, снова под произвольным углом, далее надо запаковать четвертую так, чтобы начало первой линии и конец третьей линии оказались на расстоянии друг от друга в длину четвертой линии, решить можно только методом подгона, числовым методом решения, схождение в некой дельте. Приветствую Вас, мы пришли в тему "Инверсная кинематика"
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 15:17
Arcor, я решил без всякой "Инверсной кинематики". Найден один недочёт - нельзя построить квадрат, т.к. одна сторона обязательно должна быть длиннее других.
Я не программист, поэтому сделал в моём любимом мадкаде. Формулы простые, перевести в ЯП тривиально.
Идея в следующем:
Мы будем всегда строить четырёхугольник, у которого две стороны параллельны. Для нахождения углов я воспользовался теоремой косинусов. Треугольник строю из трапеции уменьшением нижней длиннейшей стороны на величину верхней стороны, которая должна быть не больше минимальной из a,b,c,d. Нижнюю сторону после уменьшения я назвал dd. И строю треугольник "b,c,dd". Для нахождения левого угла bdd между b и dd применяю теорему косинусов.
Дальше для нахождения координат из длин и углов я использую тривиальные формулы. Получаю bx, by.
Координаты линии c так же тривиально находятся из b.
Обратно "горизонтально растягиваю" треугольник в трапецию и нахожу координаты линии a.
Т.о. нижняя линия d самая длинная из всех, верхняя линия - a не меньше самой короткой, слева линия b, справа - c.
Не сортирую заданные длины, это тоже тривиально.
Миниатюры
Построить четырехугольник с заданными сторонами   Построить четырехугольник с заданными сторонами   Построить четырехугольник с заданными сторонами  

Построить четырехугольник с заданными сторонами   Построить четырехугольник с заданными сторонами  
Вложения
Тип файла: zip четырехугольник.zip (6.8 Кб, 6 просмотров)
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 15:42
Цитата Сообщение от Rayvenor Посмотреть сообщение
Мы будем всегда строить четырёхугольник, у которого две стороны параллельны.
я и говорил, что нету одного очевидного ответа, есть бесконечное множество решений, вы взяли что-то одно и начали плястаь оттуда, таким же успехом можно было бы придумать и точки, расположенные попарно на растоянии соответствующим длинам. затем например параллельным переносом переность, "зацепляя" их друг за дружку.

в вашем алгоритме, каким способом мы будем брать две линии которые обязаны быть параллельны, вы привели 4 картинки с индивидуальными длинами, покажите как построить из 4 длин разные варианты, комбинируя линии по разному

Не по теме:

Цитата Сообщение от Rayvenor Посмотреть сообщение
Я не программист, поэтому сделал в моём любимом маДкаде
видать так любите Mathcad(маТкад)



алгоритм интреесный все же
0
Почетный модератор
 Аватар для Puporev
64311 / 47608 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
04.04.2019, 16:08
Или такой алгоритм. Программу конечно нужно довести до ума.
Delphi Скопировано
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
//процедура определения верхних координат пересечения двух окружностей
//алгоритм и обозначения здесь
litunovskiy.com/gamedev/intersection_of_two_circles/
 
procedure peres(x1,y1,r1,x2,y2,r2:integer;var x3,y3:integer);
var d,a,b,h,x,y:real;
begin
d:=sqrt(sqr(x1-x2)+sqr(y1-y2));//расстояние между центрами
b:=(sqr(r2)-sqr(r1)+sqr(d))/(2*d);
a:=d-b;
h:=sqrt(sqr(r2)-sqr(b));
x:=x1+(x2-x1)/(d/a);
y:=y1+(y2-y1)/(d/a);
x3:=round(x-(y-y2)*h/b);
y3:=round(y+(x-x2)*h/b);
end;
procedure TForm1.Button1Click(Sender: TObject);
var d:array[1..4] of integer;
    i,j,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,d5:integer;
    ms,p,h,x:real;
begin
repeat
for i:=1 to 4 do
 repeat
  d[i]:=strtoint(inputbox('Введите длину строны '+inttostr(i),'от 100 до 200','0'));
 until d[i] in [100..200];
until(d[1]<d[2]+d[3]+d[4])and(d[2]<d[1]+d[3]+d[4])and(d[3]<d[1]+d[2]+d[4])and(d[4]<d[1]+d[2]+d[3]);
//сортируем длины в порядке убывания
for i:=1 to 3 do
for j:=i+1 to 4 do
if d[i]<d[j] then
 begin
  x1:=d[i];
  d[i]:=d[j];
  d[j]:=x1;
 end;
with PaintBox1 do
 begin
  //координаты 1 точки
  x1:=50;
  y1:=height-50;
  //координаты 4 точки
  x4:=x1+d[1];
  y4:=y1;
  d5:=d[3]+d[4]-20;//длина диагонали 2-4
  peres(x1,y1,d[2],x4,y4,d5,x2,y2);//координаты точки 2
  peres(x2,y2,d[3],x4,y4,d[4],x3,y3); //координаты точки 3
//рисуем 4х-угольник
 with Canvas do
  begin
   moveto(x1,y1);
   lineto(x2,y2);
   lineto(x3,y3);
   lineto(x4,y4);
   lineto(x1,y1);
  end;
 end;
end;
1
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 16:42
Цитата Сообщение от Arcor Посмотреть сообщение
каким способом мы будем брать две линии которые обязаны быть параллельны
Эти линии выбираются по длине. Самая длинная и самая короткая всегда будут параллельны. Самая короткая не обязательно должна быть короче всех остальных, может быть равной.
Цитата Сообщение от Arcor Посмотреть сообщение
покажите как построить из 4 длин разные варианты, комбинируя линии по разному
Ды вот нельзя комбинировать. Входные данные должны сортироваться и форма четырёхугольника будет типичной. В задании не вижу строгого следования линий, т.е. можно строить линии в любом порядке. Я выбрал порядок самая длинная, средняя, самая короткая, средняя. В другом порядке нельзя построить по моему алгоритму.

Не по теме:

С версии 13 для меня он Mad :)

0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 17:57
Я вот что начал сейчас на работе перед уходом уже. уже бежать надо домой.. ээхх не доделал чуть

я со своей кинематикой))))

идея:
берем теорему косинусов
берем 3 первых длины, сравниваем длины, если сумма двух больше или равно третьей - то возможно строить треульник
вырешиваем альфу
выбираем произвольную бетту, чтобы построить первую линию, синус/косинус для высчитывания конечных точек первой линии
имя бетту + полученныую альфу, строим вторую линию, конечная точка снова синус/косинус от альфы + бетта
построили 2 линии уже!!!
берем в расчет С, Д и С'
снова по теореме косинусов решаем гамму, так как длина С у нас осталась, крутим ее вокруг на угол гамма + тот угол, что был у С до этого и вуаля мы построили четырехугольник, кинематическая модель которого останется неизменной для любых изменений углов

в чем моя загвоздка вышла сейчас и я не успел решить это на работе - надо правильно распознать ситуацию, когда к полученному углу надо + 180, а когда не надо вообще

я пошел домой, может быть вечером открою снова и попробую решить
Миниатюры
Построить четырехугольник с заданными сторонами  
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 18:37
Цитата Сообщение от Puporev Посмотреть сообщение
Или такой алгоритм. Программу конечно нужно довести до ума.
Спасибо, потырил сортировку и может что-то ещё.
Сделал свой алгоритм, вроде работает. Разве что хотел сделать выполнение процедуры при показе формы, чтобы при старте программы уже было нарисовано. Добавляю процедуру в onShow формы, но не работает. Добавлял в другие события, но ничего не заработало.
Чтобы отрисовало надо или сменить значение, масштаб или кликнуть на форму(или на PaintBox).

Забыл добавить проверку на квадрат и отлов исключительных ситуаций!
Вложения
Тип файла: zip quadrangle.zip (5.2 Кб, 7 просмотров)
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 19:38
Arcor, а вам нужно математически красивое решение или построить четырёхугольник? Если только последнее, то вы не думали про итерационный метод? Строите квадрат на основе первой стороны. Затем сравниваете вторую заданную сторону со второй стороной квадрата. Если не равны, то равняете. Сложность тут в том, что придётся равнять одну сторону и два угла. Придётся хитро разбивать на треугольники и по той же теореме косинусов считать новые углы. Это наркомания, конечно, но при современных вычислительных мощностях почему бы и нет?
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 19:47
Цитата Сообщение от Rayvenor Посмотреть сообщение
Если только последнее, то вы не думали про итерационный метод
и об этом я писал жеж выше...
Цитата Сообщение от Arcor Посмотреть сообщение
при этом отсеивайте точки/ прямые /треугольники из возможного решения... НО при этом учитывая, что длины сторон изменяться не могут ни коим образом, т.е. берем одну линию, к ней присандаливаем вторую, под произвольным углом, далее ко второй третью, снова под произвольным углом, далее надо запаковать четвертую так, чтобы начало первой линии и конец третьей линии оказались на расстоянии друг от друга в длину четвертой линии, решить можно только методом подгона, числовым методом решения, схождение в некой дельте. Приветствую Вас, мы пришли в тему "Инверсная кинематика"
потому мне и нравится метод "инверсной кинематики"(тут только малая часть этого значения), это элегантное геометрическое решение

Добавлено через 3 минуты
на картинке ошибка.. там - 2АВ, а не -2АС
0
421 / 150 / 27
Регистрация: 04.08.2018
Сообщений: 634
04.04.2019, 20:03
Цитата Сообщение от Arcor Посмотреть сообщение
и об этом я писал жеж выше...
Пардон, я не внимательно читал этот абзац. После фразы
Цитата Сообщение от Arcor Посмотреть сообщение
к ней присандаливаем вторую, под произвольным углом
я перестал понимать. В алгоритме не может быть произвольного угла, я не понял и дочитал по диагонали.
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 21:43
мой алгоритм выше был слегка не верный, вот что я хотел в конце концов сделать
по первой картинке
Построить четырехугольник с заданными сторонами

1 - берем 4 произвольные длины(A, B, C, D), заведомо из которых можно соорудить треугольник
2 - берем вспомогательную длину Q, любой длины, но тже при условии, что с ней можно построить треугольник
3 - по теореме косинусов вырешиваем углы 1 - 6, использовать будем 1, 2 и 6; 3, 4 и 5 для проверки или построения с другого "края"
4 - по углу 1 строим первую линию, длиной А
5 - по углу 2 строим вторую линию, длиной B
6 - по углу 6 строим третью линию, длиной С
7 - линия D строится автоматически, так как она тоже учавствовала при решении теоремы косинусов, так что все взаимосвязано!!!

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

далее просто от балды куча разных длин и в итоге идет замер реальной длины, решилось ли все верно или нет, слева в логе можно видеть углы и длины после проверки, на картинке начатая прога-фреймворк для 2D CAD, просто там уже есть много инструментов для удобной работы с геометрией)) не стал канвасом баловаться..

осталась самая малость сделать распознавание правильного угла, чем я в своем фреймворке и займусь, эта тема толкнула нановые мысли и я делал в первую очередь это задание для себя самого)

Построить четырехугольник с заданными сторонами

Построить четырехугольник с заданными сторонами

Построить четырехугольник с заданными сторонами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2019, 21:43
Помогаю со студенческими работами здесь

Пройдет ли кирпич со сторонами x,y,z сквозь прямоугольное отверстие со сторонами r и s. Стороны отверстия долж
Пройдет ли кирпич со сторонами x,y,z сквозь прямоугольное отверстие со сторонами r и s. Стороны отверстия должны бить параллельны граням...

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

Определить, можно ли построить треугольник с заданными сторонами
Заданы три целых числа a, b, c. Определить, можно ли построить треугольник с такими сторонами. Треугольник может быть построен, если...

Выяснить, можно ли построить треугольники с заданными сторонами
Даны длины отрезков a,b,c,d,e. Выяснить, можно ли построить треугольники со сторонами {a,b,c}, {b,c,d}, {c,d,e}? Если да, то найдите...

Выяснить, можно ли построить треугольник с заданными сторонами
Даны действительные, положительные числа A,B,C. Выяснить, можно ли построить треугольник с такими сторонами (сумма длин любых двух сторон ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер