Есть массив треугольников, заданных координатами вершин. Как определить номера треугольников, подобных первому? Здравствуйте Есть массив треугольников, заданных координатами вершин. Нужно определить номера треугольников, подобных первому. Что я делаю. 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 Есть компетентный человек, который утверждает, что результат работы неверен. Но категорически отказывается даже заглядывать в код. В чем моя ошибка?
В вашем коде есть некоторые ошибки. Одна из них в функции 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.
Исправьте это в вашем коде, и у вас должна получиться правильная логика определения номеров треугольников, подобных первому.
В вашем коде есть некоторые ошибки. Одна из них в функции 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.
Исправьте это в вашем коде, и у вас должна получиться правильная логика определения номеров треугольников, подобных первому.