Я мучительно из -за этого и не могу понять это. Не буду лгать, я довольно новичок в программировании, и ИИ написал большую часть этой программы. Я пытаюсь измерить угол между наборами линий пользователя для оценки ERGO. Цель состоит в том, чтобы измерить угол между ключевыми точками тела, такими как позвоночник, верхняя нога, нижняя рука и т. Д., По отношению к другим линиям. Пользователь сфотографирует человека, а затем проследит линии по их телу, и он сделает некоторую математику и даст им счет. Все строки будут нарисованы пользователем, и каждая строка имеет определенную эталонную строку, которую он использует. Теперь я могу заставить его работать, но только если линия нарисована определенным образом. Но у меня есть чувства, которые пользователи не будут читать инструкции и сломать приложение, и они получат неточную оценку, что было бы плохо. Число, которое я получаю, не является неверным, если сказать, просто неправильная часть измерения, если это сделано с тех пор (бесплатные углы и т. Д.). 60 градусов. Но если я нарисую одну или обе строки «неправильно» или нет, как я запрограммировал; Я мог бы получить 130 градусов, -60 или -130 градусов. Оценка строгая из -за того, какое измерение он ищет. Допустим, любой угол выше 50 градусов дает вам значение 1 ниже 50, значение 0. Это измерение выше 50 градусов, но программа записей -130 градусов, так что теперь оно неточно. И это проблема безопасности. В коде ниже этого показано угол багажника, позвоночник и угол шеи (который ссылается на туловище). С человеком, стоящим прямо вверх, угол багажника будет нулевым, любое прямое изгиб является положительным углом, а обратное изгиб - отрицательный угол. Вот почему у меня есть пользователь ответить, будь то субъект вперед или нет, я знаю, что я знаю. Шея ссылается на ствол и то же самое применяется; вперед = + и назад = -. < /p>
Код: Выделить всё
function calculateAngle(point1, point2, toolType) {
// Create vector from point1 to point2 (in the order user drew them)
const vector = {
x: point2.x - point1.x,
y: point2.y - point1.y
};
// For trunk angle (reference is vertical)
if (toolType === 'trunk') {
// Calculate trunk's absolute angle from vertical
const trunkAngle = Math.atan2(vector.x, vector.y) * (180 / Math.PI);
// We need to measure from North position (use complementary angle)
let northAngle = 180 - Math.abs(trunkAngle);
// Preserve original sign for direction
if (trunkAngle < 0) northAngle = -northAngle;
// Adjust based on subject facing direction
if (subjectFacingDirection === 'right') {
return northAngle;
} else { // 'left'
return -northAngle;
}
}
// For neck angle
if (toolType === 'neck') {
const trunkPoints = lines['trunk'];
if (!trunkPoints || trunkPoints.length < 2) {
console.error("Trunk must be drawn before neck");
return 0;
}
// Trunk vector from tailbone to neck
const trunkVector = {
x: trunkPoints[1].x - trunkPoints[0].x,
y: trunkPoints[1].y - trunkPoints[0].y
};
// Calculate dot product
const dotProduct = vector.x * trunkVector.x + vector.y * trunkVector.y;
// Calculate magnitudes
const vectorMag = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
const trunkMag = Math.sqrt(trunkVector.x * trunkVector.x + trunkVector.y * trunkVector.y);
// Calculate angle between vectors (0-180 degrees)
let angle = Math.acos(dotProduct / (vectorMag * trunkMag)) * (180 / Math.PI);
// Use cross product to determine direction
const crossProduct = trunkVector.x * vector.y - trunkVector.y * vector.x;
if (subjectFacingDirection === 'right') {
angle = crossProduct < 0 ? angle : -angle;
} else { // 'left'
angle = crossProduct > 0 ? angle : -angle;
}
return -angle; // Negate the angle
}
Итак, как я могу убедиться, что я могу получить правильный номер угла независимо от порядка, в котором сделаны точки или как нарисована линия.
Подробнее здесь:
https://stackoverflow.com/questions/796 ... s-of-direc