Hej, próbuję obliczyć wierzchołki obróconego prostokąta (2D).Obliczanie wierzchołków obróconego prostokąta
To proste, jeśli prostokąt nie został obrócony, wymyśliłem tę część.
Jeśli prostokąt został obrócony, pomyślałem o dwóch możliwych sposobach obliczania wierzchołków. 1) Dowiedz się, jak przekształcić wierzchołki z przestrzeni lokalnej/obiektowej/modelu (te, które znalazłem poniżej) w przestrzeń światową. Szczerze mówiąc nie mam pojęcia, a jeśli to jest najlepszy sposób, to czuję, że wiele się z tego nauczyłbym, gdybym mógł to rozgryźć ...
2) Użyj trig, aby w jakiś sposób dowiedzieć się, gdzie znajdują się punkty końcowe prostokąt są względem położenia prostokąta w przestrzeni świata. W ten sposób próbowałem do tej pory, po prostu nie wiem, jak.
Oto funkcja, która oblicza wierzchołki do tej pory, dzięki za wszelką pomoc
void Rect::calculateVertices()
{
if(m_orientation == 0) // if no rotation
{
setVertices(
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z));
}
else
{
// if the rectangle has been rotated..
}
//GLfloat theta = RAD_TO_DEG(atan(((m_width/2) * m_scaleX)/((m_height/2) * m_scaleY)));
//LOG->writeLn(&theta);
}
+1 - Wolę odwrócić się i wykonać jakąkolwiek pracę, co uprości życie. –
W ten sposób można uzyskać tylko wykonując 2 operacje trig (jeśli przechowujesz wyniki 'cos (t)' i 'sin (t)' przed obliczeniem jakichkolwiek obróconych wierzchołków). – jnylen
Jak ten wzór miałby obracać się zgodnie z ruchem wskazówek zegara? –