#javascript #canvas
У меня будет 3 интупа и баттон. При нажатии на этот батон должен нарисоваться треугольник у которого 3 стороны равны значениям в инпутах. Как это организовать? Нагуглил context.beginPath(); context.moveTo(30, 20); context.lineTo(some_value); context.lineTo(some_value); context.closePath(); Но этот способ подходит для рисования, по двум сторонам.
Ответы
Ответ 1
Вам надо найти координаты вершин и соединить их отрезками. Пусть одна сторона (например, A) лежит вдоль оси 0X. Тогда её Y-координата будет равна 0. А значит и двух вершин треугольника тоже. Остаётся найти ещё одну вершину и соединить её с концами этого отрезка A. Я бы для начала нашёл углы треугольника. Это можно сделать из двух разных формул поиска площади треугольника: по формуле Герона и зная, что площадь равна произведению длин двух сторон на синус угла между ними. После этого можно опустить высоту из вершины, координаты которой ищем, и внутри прямоугольного треугольника легко найдём x- и y-компоненты координаты. btn.onclick = () => { let A = 1 * a.value, B = 1 * b.value, C = 1 * c.value; let p = (A + B + C) / 2; let S = Math.sqrt(p * (p - A) * (p - B) * (p - C)); let SinA = 2 * S / (A * B); let alpha = Math.asin(SinA); let x = B * Math.cos(alpha), y = B * Math.sin(alpha); let ctx = img.getContext("2d"); ctx.beginPath(); ctx.moveTo(10 + A, 70); ctx.lineTo(10, 70); ctx.lineTo(10 + x, 70 - y); ctx.lineTo(10 + A, 70); ctx.stroke(); }
Комментариев нет:
Отправить комментарий