По существу, вам нужно установить подходящую ортонормированную координату , так что один базисный вектор указывает вдоль данной линии, а другие два ортогональны этому. Фактический выбор зависит от угла, о котором вы говорите, но вам нужно какое-то направление для определения угла нуля.
Обычно я бы сказал, допустим, что a является нормированным (длиной 1) вектором от одного из пунктов к другому. Пусть v некоторое фиксированное опорное направление, например, «Вверх». Убедитесь, что a и v являются независимыми, то есть направлены в разные стороны. Вычислить кросс-продукт a × v, нормализовать длину блока и называть это b. Это будет вектор, ортогональный как a, так и v и, следовательно, что-то вроде направления от линии в горизонтальной плоскости, если v был наверху. Вычислить гр = в × б, который будет третий базисный вектор, ортогональное к и б и уже на единицу длины.
Теперь возьмите либо конечную точку и добавить ± ш/2 ∙ б ± ч/2 ∙ с к тому, что, где ш и ч являются размеры прямоугольника. Это дает вам 8 угловых точек вашего ограничивающего прямоугольника. Если вы хотите, чтобы повернуть рамку вокруг линии, нанесите двумерную вращение векторов б и с:
Ь» = соз (θ) ∙ б + sin (q) ∙ с
с» = соз (θ) ∙ с - грех (θ) ∙ б
Для уточнения: у вас есть линия * отрезок *, с учетом * конечных точек *, и вы не l ooking для маленького осевого параллельного блока, содержащего эту строку (что является обычным значением ограничивающего блока), но вместо этого для некоторого блока, который содержит эту строку, и дал размеры. Правильно? Является ли длина поля равным длине строки? Вы пишете, что у вас есть поворот вокруг оси, но в отношении какой системы отсчета, т. Е. Что означает угол? – MvG
Да, ваши предположения, приведенные выше, верны. коробка имеет такую же длину, что и линия. Угол 0 будет параллелен плоскости ниже. Спасибо за ваш ответ, попытайтесь закодировать алгоритм. –