Есть массив треугольников, заданных координатами вершин. Как определить номера треугольников, подобных первому? Здравствуйте
Есть массив треугольников, заданных координатами вершин. Нужно определить номера треугольников, подобных первому. Что я делаю.
1. Нам понадобится формула расстояния между точками: def length(a, b)
return math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2
2. Для определения подобных треугольников я буду пользоваться тем фактом, что отношение периметров таких треугольников равно коэф. подобия, а отношение площадей - квадрату того же числа. Соответственно мне нужно найти их для каждого из треугольников. Вот так:triangles = [
for i in v
a = length(i[0], i[1]
b = length(i[0], i[2]
c = length(i[1], i[2]
triangle = [
p = (a + b + c)/
area = math.sqrt(p * (p - a) * (p - b) * (p - c)
triangle.append(p*2
triangle.append(area
triangles.append(triangle
3. Теперь функция, которая будет определять подобные треугольники:def is_sim(sample, triangle)
if int(sample[0]/triangle[0])**2 == int(sample[1]/triangle[1])
return Tru
else
return Fals
4. И этой функцией побежали по списку треугольниковfor i in range(0, len(triangles) - 1)
if is_sim(triangles[0], triangles[i])
print str(i+1
Есть компетентный человек, который утверждает, что результат работы неверен. Но категорически отказывается даже заглядывать в код.
В чем моя ошибка?

21 Авг 2019 в 06:14
141 +1
0
Ответы
1

В вашем коде есть некоторые ошибки. Одна из них в функции is_sim, где вы используете оператор ** для возведения в степень, но не учитываете то, что результат может быть дробным. Вместо этого вам нужно использовать оператор // для целочисленного деления.

Вот исправленный код для функции is_sim:

def is_sim(sample, triangle)
if (sample[0] // triangle[0])**2 == (sample[1] // triangle[1])
return Tru
else
return False

Также обратите внимание, что при вызове функции is_sim вы передаете triangles[0] в качестве образца для сравнения с остальными треугольниками, но это не обязательно первый треугольник в массиве triangles. Вам нужно сравнивать все треугольники с первым треугольником, заданным в вашем исходном массиве v.

Исправьте это в вашем коде, и у вас должна получиться правильная логика определения номеров треугольников, подобных первому.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 663 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир