Генерация рандомного треугольника

Есть такая задача: Написать функцию, которая создает треугольник на плоскости со случайными координатами в виде кортежа ((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 шт):

Автор решения: Zhihar

уравнение прямой:

y = ax + b

имея 2 точки вы можете вычислить коэффициенты (a, b), а на 3 точке проверить - если подставить x, y в уравнение, то обратится ли оно в 0 или нет - это и будет проверка на то, лежат ли 3 точки на 1 прямой

единственное, что надо учесть, что прямая может быть вертикальной или горизонтальной :)

→ Ссылка
Автор решения: Aziz Umarov

Тождество на проверку

(Y3-Y1)/(Y2- Y1)-(X3-X1)/(X2-X1)=0

Ссылка на уравнение

Уравнение прямой проходящей через две точки

→ Ссылка
Автор решения: vp_arth
x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) == 0  

Просто вычисляем площадь(удвоенную) треугольника, и если она нулевая - значит он вам не подходит =)


Или из уравнения прямой легко выводится тождество:

(y1-y2)(x1-x3) == (y1-y3)(x1-x2)

На самом деле, математически способы эквивалентны в точности до перестановки точек =)

На практике, вам придётся работать с плавающими запятыми. Стало быть сравнивать числа нужно с этой оговоркой. abs(V) < eps

→ Ссылка