Определить существование треугольника по трем сторонам
С клавиатуры вводятся длины трех отрезков. Определить, можно ли из них составить треугольник.
Решение задачи на языке программирования Python
У треугольника сумма любых двух сторон должна быть больше третьей. Иначе две стороны просто «лягут» на третью и треугольника не получится.
Пользователь вводит длины трех сторон. Программа должна определять, может ли существовать треугольник при таких длинах. Это значит, необходимо сравнить суммы всех пар сторон с оставшейся третьей стороной. Чтобы треугольник существовал, сумма всегда должна быть больше отдельной стороны или, по крайней мере, не меньше, если учитывать так называемый вырожденный треугольник.
Поскольку всего три стороны, то можно составить три варианта сложения двух сторон: a + b, b + c, a + c. Первую сумму сравниваем с оставшейся стороной c, вторую — с a и третью — с b. Если хотя бы в одном случае сумма окажется не больше третьей стороны, то делается вывод, что треугольник не существует.
print("Стороны:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) if a + b > c and a + c > b and b + c > a: print("Треугольник существует") else: print("Треугольник не существует")
Можно решить задачу сложнее. Если требуется также определить, какая из сторон больше суммы двух других, то решение может быть таким:
print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) flag = '' if a + b > c: if a + c > b: if b + c > a: print("Треугольник есть") else: flag = 'a' else: flag = 'b' else: flag = 'c' if flag != '': print("Треугольника нет") print("'%s' > суммы других" % flag)
Особого смысла использовать переменную flag здесь нет. Она просто позволяет лишний раз не писать в программе строки, информирующие о том, что треугольник не существует.
Пример выполнения программы:
Длины сторон треугольника: a = 4 b = 5 c = 10 Треугольника нет 'c' > суммы других
Более изящным решением является использование оператора множественного ветвления языка программирования Python: if-elif-else.
print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) flag = '' if a + b <= c: flag = 'c' elif a + c <= b: flag = 'b' elif b + c <= a: flag = 'a' else: print("Треугольник есть") if flag != '': print("Треугольника нет") print("'%s' > суммы других" % flag)
Здесь сравнение происходит от обратного: утверждается, что сумма двух сторон меньше или равна третьей. Если это так (утверждение верно), то треугольника не существует. «Слишком длинная сторона» определяется в зависимости от того, в заголовке какой ветки логическое выражение возвращает истину.
Больше задач в PDF
Я написал условия на проверку. Какой это треугольник. Можется подсказать как лучше написать это условие чтобы оно выглядело не таким громоздким
if ((side_1 + side_2 <= side_3) || (side_1 + side_3 <= side_2) || (side_2 + side_3 <= side_1))
{
// Это не треугольник!
}
else
if ((side_1 == side_2) && (side_2 == side_3))
{
// Это равносторонний треугольник!
}
else
if (((side_1 == side_2) && (side_2 != side_3)) || ((side_1 == side_3) && (side_2 != side_3)) || ((side_2 == side_3) && (side_1 != side_3)))
{
// Это равнобедренный треугольник!
}
задан 8 авг 2021 в 17:17
AidamirAidamir
1279 бронзовых знаков
4
Здесь особо никакой магии, супероптимизацию не придумать, но можно причесать код:
- Переменные назвать покороче, в данном конкретном случае, стороны треугольника можно обозвать A, B и C.
- Скобки в условиях можно убрать
if ((a == b) && (b == c))
содержит лишние скобки, можно такif (a == b && b == c)
. - Так как вы уже проверили, равносторонний это треугольник или нет, и перешли к проверке равнобедренного, то одна сторона у вас точно как минимум не равна двум другим, следовательно и проверку лишнюю выполнять не нужно.
Я проверил код на консольном приложении, получилось вот так:
static void Main(string[] args)
{
int a = ReadPositiveNumber("Введите a = ");
int b = ReadPositiveNumber("Введите b = ");
int c = ReadPositiveNumber("Введите c = ");
if (a + b <= c || a + c <= b || b + c <= a)
Console.WriteLine("Это не треугольник!");
else if (a == b && b == c)
Console.WriteLine("Это равносторонний треугольник!");
else if (a == b || a == c || b == c)
Console.WriteLine("Это равнобедренный треугольник!");
else
Console.WriteLine("Это треугольник.");
Console.ReadKey();
}
private static int ReadPositiveNumber(string prompt)
{
while (true)
{
Console.Write(prompt);
if (int.TryParse(Console.ReadLine(), out int number) && number > 0)
return number;
Console.WriteLine("Некорректный ввод, введите натуральное число.");
}
}
Кстати да, на этапе ввода я уже проверяю, что пользователь ввел натуральное число. Если у вас этой проверки нет, то ее нужно добавить.
Pavel Mayorov
57.7k7 золотых знаков71 серебряный знак144 бронзовых знака
ответ дан 8 авг 2021 в 17:47
aepot♦aepot
45.1k5 золотых знаков22 серебряных знака51 бронзовый знак
if (a + b <= c || a + c <= b || b + c <= a)
return "Не треугольник";
if (a == b && b == c)
return "Равносторонний";
if (a == b || b == c || a == c)
return "Равнобедренный";
return "Обычный";
Если хочется минимизировать число сравнений (хотя почти наверняка смысла нет):
if (a == b)
if (b == c)
return "Равносторонний";
else if (a + b <= c)
return "Не треугольник";
else
return "Равнобедренный";
if (a == c)
if (a + c <= b)
return "Не треугольник";
else
return "Равнобедренный";
if (b == c)
if (b + c <= a)
return "Не треугольник";
else
return "Равнобедренный";
return "Обычный";
ответ дан 8 авг 2021 в 18:13
Qwertiy♦Qwertiy
121k24 золотых знака121 серебряный знак291 бронзовый знак
Перейти к содержанию
На чтение 2 мин Просмотров 466 Опубликовано 08.02.2023
Содержание
- Введение
- Написание кода
- Заключение
Введение
В ходе статьи напишем код на языке программирования Python, который сможет определить, существует ли треугольник с заданными сторонами.
Написание кода
Для начала дадим пользователю возможность ввести три стороны треугольника:
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
Как мы знаем, треугольник существует только в том случае, если сумма двух его сторон больше третьей. Зададим условие, в котором проверим сразу все три стороны:
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print('Треугольник существует')
else:
print('Треугольник не существует')
# a = 3
# b = 3
# c = 3
# Треугольник существует
and – логический оператор “И”
Также стоит отметить, что существует понятие выраженного треугольника. Следуя данному понятию сумма двух сторон может равняться третьей, и в таком случае в условии нужно будет использовать не просто знак больше (>), а больше или равно (>=):
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b >= c and a + c >= b and b + c >= a:
print('Треугольник существует')
else:
print('Треугольник не существует')
Заключение
В ходе статьи мы с Вами написали код на языке программирования Python, который может определить, существует ли треугольник с заданными сторонам. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂
To detect a triangle in an image, we first detect all the contours in the image. Then we loop over all the contours. Find the approximate contour for each of the contours. If the number of vertex points in the approximate contour is 3, then draw the contour and set it as a triangle. See the below pseudocode.
for cnt in contours: approx = cv2.approxPolyDP() if len(approx) == 3: cv2.drawContours() cv2.putText("Triangle")
Steps
You can use the following steps to detect a triangle in the input image −
Import the required library. In all the following Python examples, the required Python library is OpenCV. Make sure you have already installed it.
import cv2
Read the input image using cv2.imread() and convert it to grayscale.
img = cv2.imread('approx1.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Apply thresholding on the grayscale image to create a binary image. Adjust the second parameter to get a better contour detection.
ret,thresh = cv2.threshold(gray,50,255,0)
Find the contours in the image using cv2.findContours() function.
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
Select a contour (say first contour) cnt from the lists of contours. Or Loop over all the contours.
Compute the approximate contour points for each contour cnt using cv2.approxPolyDP() function.
approx = cv2.approxPolyDP(cnt,epsilon,True)
If the vertex points in the approximate contour approx is 3, then draw the contour on the image and set it a triangle.
Display the image with drawn contours and approximate contours on it.
cv2.imshow("Shapes", img) cv2.waitKey(0) cv2.destroyAllWindows()
Let’s look at some examples for a better understanding.
Example 1
In the Python code below, we detect the triangle in the input image.
import cv2 img = cv2.imread('shapes.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(gray,50,255,0) contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) print("Number of contours detected:",len(contours)) for cnt in contours: approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True) if len(approx) == 3: img = cv2.drawContours(img, [cnt], -1, (0,255,255), 3) M = cv2.moments(cnt) if M['m00'] != 0.0: x = int(M['m10']/M['m00']) y = int(M['m01']/M['m00']) cv2.putText(img, 'Triangle', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2) cv2.imshow("Shapes", img) cv2.waitKey(0) cv2.destroyAllWindows()
We will use the following image as the Input File in the above program code −
Output
When you execute the above code, it will produce the following output on the console.
Number of contours detected: 4
And we get the following window, showing the output −
In the above output image, one triangle is detected.
Example 2
In this example, we will show how you can detect multiple triangles in an image.
import cv2 import numpy as np img = cv2.imread('shapes1.jpg') img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img1,150,255,0) contours,hierarchy = cv2.findContours(thresh, 1, 2) print("Number of contours detected:",len(contours)) for cnt in contours: approx = cv2.approxPolyDP(cnt, 0.1*cv2.arcLength(cnt, True), True) if len(approx) == 3: img = cv2.drawContours(img, [cnt], -1, (0,255,255), 3) M = cv2.moments(cnt) if M['m00'] != 0.0: x = int(M['m10']/M['m00']) y = int(M['m01']/M['m00']) cv2.putText(img, 'Triangle', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2) cv2.imshow("Triangles", img) cv2.waitKey(0) cv2.destroyAllWindows()
We will use the following image as the Input File in this program −
Output
When you execute the above code, it will produce the following output on the console −
Number of contours detected: 6
And we get the following window, showing the output −
In the above output image, we detected four triangles.
Математическая формула площади треугольника в Python: Площадь треугольника =(s*(sa)*(sb)*(sc))-1/2.
Здесь полупериметр, а a, b и c — три стороны треугольника. Давайте разберем следующий пример.
См. этот пример:
# Three sides of the triangle is a, b and c: a = float(input('Enter first side: ')) b = float(input('Enter second side: ')) c = float(input('Enter third side: ')) # calculate the semi-perimeter s =(a + b + c) / 2 # calculate the area area =(s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)
Выход:
Enter first side: 5 Enter second side: 6 Enter third side: 7 The area of the triangle is 14.70
Объяснение:
Мы берем входные данные как три стороны треугольника и сохраняем их в трех переменных a, b и c. Затем мы вычислили полупериметр треугольника и подставили это значение в формулу площади треугольника.
Примечание. %0.2f с плавающей запятой указывает как минимум 0 широких и 2 числа после запятой. Если вы используете% 0.5f, то он даст 5 чисел после запятой.
Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.