Ищем самый быстрый способ вычислить точку, лежащую на прямой
заданное расстояние от конечной точки линии:
void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py)
{
//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2
*px = ???
*py = ???
}
Спасибо за ответы, нет, это не домашняя работа, просто взлом
моя обычная область знаний.
Это функция, предложенная ниже. Это не близко к работе. Если я
вычислять точки каждые 5 градусов в верхней правой части 90 градусов
окружность в качестве начальной точки и вызов функции ниже с центром круга как x2, y2 с расстоянием 4, конечные точки совершенно неверны. Они лежат ниже и справа от центра, а длина равна центральной точке. У кого-нибудь есть предложения?
void calculate_line_point(int x1, int y1, int x2, int y2, int distance)
{
//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2
double vx = x2 - x1; // x vector
double vy = y2 - y1; // y vector
double mag = sqrt(vx*vx + vy*vy); // length
vx /= mag;
vy /= mag;
// calculate the new vector, which is x2y2 + vxvy * (mag + distance).
px = (int) ( (double) x2 + vx * (mag + (double)distance) );
py = (int) ( (double) y2 + vy * (mag + (double)distance) );
}
Я нашел это решение для stackoverflow, но не понимаю его полностью, кто-нибудь может уточнить?