Как повернуть линию вокруг одной из вершин

Я делаю свой первый движок Raycasting и хочу повернуть линию на угол θ.

Как это сделать? Можно ли показать мне базовый код на C++ или псевдокод?

Это изображение описывает мою проблему: Как повернуть линию вокруг одной из вершин


Необязательный вопрос

Я решил сделать все это в graphics.h, потому что это простейший графический заголовок для C / C++.

Также интересно, потому что кросс-продукт работает только в 3-х измерениях.

user7847084 03.01.2019 11:43

Ссылка не работает, я получаю, что изображение не отображается.

SPlatten 03.01.2019 11:43

Меня устраивает :/

user7847084 03.01.2019 11:45

Если вы занимаетесь линейной алгеброй, выберите библиотеку линейной алгебры и выразите ее, используя значения соответствующих типов. Затем вы можете написать код, который выглядит как математика B = P + M * (A - P);возможно, допустимый C++

Caleth 03.01.2019 13:08

Этот сайт может быть вам полезен: geomalgorithms.com

kvantour 03.01.2019 13:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
87
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Один простой алгоритм:

  1. Переместите круг -P так, чтобы P находился в точке (0, 0).
  2. Поверните A на угол, умножив его на матрица вращения.
  3. Переместите круг P, чтобы восстановить исходное положение.

Все эти три шага можно выполнить с помощью одного умножения матрицы 3x3.

Ответ принят как подходящий

Вы хотите:

B = P + M * (A - P)

Где M - это двумерная матрица вращения:

M = |  cos(ϴ)  -sin(ϴ) |
    |  sin(ϴ)   cos(ϴ) |

В C++ это можно было бы записать как:

float c = cos(theta), s = sin(theta);
float dx = ax - px, dy = ay - py;
float bx = px + c * dx - s * dy;
float by = py + s * dx + c * dy;

Скалярное произведение двух векторов обладает следующим свойством:

vec(PA) . vec(PB) = rho cos theta

Взяв определение наших двух векторов:

vec(PA) = (x_a-x_p, y_a-y_p)
vec(PB) = (x_b-x_p, y_b-y_p)

Мы можем получить:

(x_a-x_p)(x_b-x_p) + (y_a-y_p)(y_b-y_p) = rho cos theta (1)

Поскольку PA = PB, мы также имеем:

(x_a-x_p)^2 + (y_a-y_p)^2 = (x_b-x_p)^2 + (y_b-y_p)^2 (2)

Из (1) и (2) вы можете получить x_b и y_b с помощью некоторого арифметического автопилота.

Другие вопросы по теме