Генерация рандомного треугольника
Есть такая задача: Написать функцию, которая создает треугольник на плоскости со случайными координатами в виде кортежа ((1, 2), (2, 3), (3, 4)). В функции должна быть проверка, чтобы три точки не лежали на одной прямой.
Ниже мой код генерации координат:
import random
def f():
coords = tuple([(random.uniform(-100, 100), random.uniform(-100, 100)) for i in range(3)])
return coords
Не могу сообразить как написать проверку, что точки не лежат на одной прямой. Может быть как-то через расчет площади треугольника?
Ответы (3 шт):
уравнение прямой:
y = ax + b
имея 2 точки вы можете вычислить коэффициенты (a, b), а на 3 точке проверить - если подставить x, y в уравнение, то обратится ли оно в 0 или нет - это и будет проверка на то, лежат ли 3 точки на 1 прямой
единственное, что надо учесть, что прямая может быть вертикальной или горизонтальной :)
Тождество на проверку
(Y3-Y1)/(Y2- Y1)-(X3-X1)/(X2-X1)=0
Ссылка на уравнение
Уравнение прямой проходящей через две точки
x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) == 0
Просто вычисляем площадь(удвоенную) треугольника, и если она нулевая - значит он вам не подходит =)
Или из уравнения прямой легко выводится тождество:
(y1-y2)(x1-x3) == (y1-y3)(x1-x2)
На самом деле, математически способы эквивалентны в точности до перестановки точек =)
На практике, вам придётся работать с плавающими запятыми. Стало быть сравнивать числа нужно с этой оговоркой. abs(V) < eps