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

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

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

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

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

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

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

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

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

Решение

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

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

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

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

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

Цитата Сообщение от Rayvenor Посмотреть сообщение
Рисуем любое возможное решение - это не противоречит условию задачи
при этом отсеивайте точки/ прямые /треугольники из возможного решения... НО при этом учитывая, что длины сторон изменяться не могут ни коим образом, т.е. берем одну линию, к ней присандаливаем вторую, под произвольным углом, далее ко второй третью, снова под произвольным углом, далее надо запаковать четвертую так, чтобы начало первой линии и конец третьей линии оказались на расстоянии друг от друга в длину четвертой линии, решить можно только методом подгона, числовым методом решения, схождение в некой дельте. Приветствую Вас, мы пришли в тему "Инверсная кинематика"
0
416 / 145 / 27
Регистрация: 04.08.2018
Сообщений: 610
04.04.2019, 15:17 11
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
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
04.04.2019, 15:42 12
Цитата Сообщение от Rayvenor Посмотреть сообщение
Мы будем всегда строить четырёхугольник, у которого две стороны параллельны.
я и говорил, что нету одного очевидного ответа, есть бесконечное множество решений, вы взяли что-то одно и начали плястаь оттуда, таким же успехом можно было бы придумать и точки, расположенные попарно на растоянии соответствующим длинам. затем например параллельным переносом переность, "зацепляя" их друг за дружку.

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

Не по теме:

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



алгоритм интреесный все же
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
04.04.2019, 16:08 13
Или такой алгоритм. Программу конечно нужно довести до ума.
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
416 / 145 / 27
Регистрация: 04.08.2018
Сообщений: 610
04.04.2019, 16:42 14
Цитата Сообщение от Arcor Посмотреть сообщение
каким способом мы будем брать две линии которые обязаны быть параллельны
Эти линии выбираются по длине. Самая длинная и самая короткая всегда будут параллельны. Самая короткая не обязательно должна быть короче всех остальных, может быть равной.
Цитата Сообщение от Arcor Посмотреть сообщение
покажите как построить из 4 длин разные варианты, комбинируя линии по разному
Ды вот нельзя комбинировать. Входные данные должны сортироваться и форма четырёхугольника будет типичной. В задании не вижу строгого следования линий, т.е. можно строить линии в любом порядке. Я выбрал порядок самая длинная, средняя, самая короткая, средняя. В другом порядке нельзя построить по моему алгоритму.

Не по теме:

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

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

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

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

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

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

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

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

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
04.04.2019, 21:43
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
04.04.2019, 21:43
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­тиби­тный асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru