Rise,
спасибо, осталось с одинаковыми точками разобратся :) |
рони, наверное лучше без деления обойтись, а то неточные вычисления могут получиться при сравнении.
if ((points[i]["x"] - points[k]["x"]) * (points[j]["y"] - points[k]["y"]) - (points[j]["x"] - points[k]["x"]) * (points[i]["y"] - points[k]["y"]) == 0) continue; |
Rise,
:thanks: |
Цитата:
Я вообще думал добавить проверку на точки на одной прямой, но вспомнил, что в школе нам говорили что 3 точки на одной прямой тоже образуют треугольник; но у него один угол равен 180 градусов, а остальные два по нулям. |
var x = [0,1,0,6], y = [2,0,1,6], n = x.length; var sqrt = Math.sqrt, pow = Math.pow; var A, An = n - 2, AB, B, Bn = n - 1, BC, C, Cn = n - 0, CA, P, Pn = [], S, Sn = []; for (A = 0; A < An; A++) { for (B = A + 1; B < Bn; B++) { for (C = B + 1; C < Cn; C++) { if ((x[A] - x[C]) * (y[B] - y[C]) == (x[B] - x[C]) * (y[A] - y[C])) continue; AB = sqrt(pow(x[A] - x[B], 2) + pow(y[A] - y[B], 2)); BC = sqrt(pow(x[B] - x[C], 2) + pow(y[B] - y[C], 2)); CA = sqrt(pow(x[C] - x[A], 2) + pow(y[C] - y[A], 2)); P = AB + BC + CA; Pn.push(P); P /= 2; S = sqrt(P * (P - AB) * (P - BC) * (P - CA)); Sn.push(S); } } } console.table({P: Pn, S: Sn}); |
Rise,
:dance: |
рони, ;)
|
Часовой пояс GMT +3, время: 23:01. |