本文整理汇总了C++中Matriz::rotacao方法的典型用法代码示例。如果您正苦于以下问题:C++ Matriz::rotacao方法的具体用法?C++ Matriz::rotacao怎么用?C++ Matriz::rotacao使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matriz
的用法示例。
在下文中一共展示了Matriz::rotacao方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: startAutorama
/* DESENHA O CARRO ANDANDO SOBRE A CURVA */
void CanvasPista::startAutorama(void) {
int iFinal = pontosDeControle.size() - 3; // posicao do ultimo segmento de curva
if (tempo > 1.0) // Passa para o proximo segmento de curva
{
tempo = 0;
posicaoAtual += 3;
if (posicaoAtual >= iFinal)
{
posicaoAtual = 0;
}
}
if ((iFinal - posicaoAtual) <= 3) // Se nao formar mais dois segmentos, o ultimo segmento sera maior
{
subPontosDeControle2 = std::vector<Ponto>(&pontosDeControle[posicaoAtual], &pontosDeControle[pontosDeControle.size()]);
first = true;
}
else // Forma os segmentos de curvas cubicas
{
subPontosDeControle2 = std::vector<Ponto>(&pontosDeControle[posicaoAtual], &pontosDeControle[posicaoAtual + 3 + 1]);
first = true;
}
// Calcula o bezier e a tangente
Ponto pontoBezier = bezier(subPontosDeControle2, tempo);
Ponto tangente = derivadaBezier(subPontosDeControle2, tempo);
float angulo = (float)(atan((float)tangente.y / (float)tangente.x) * 180) / 3.14;
// Define as posicoes iniciais do carro
Ponto inferiorEsquerdo(pontoBezier.x - 10, pontoBezier.y - 4);
Ponto inferiorDireito(pontoBezier.x + 10, pontoBezier.y - 4);
Ponto superiorEsquerdo(pontoBezier.x - 10, pontoBezier.y + 4);
Ponto superiorDireito(pontoBezier.x + 10, pontoBezier.y + 4);
// Realiza as transformacoes 2D (ordem inversa)
Matriz matriz; // Cria matriz de transformacao
matriz.translada(pontoBezier.x, pontoBezier.y); // Translada para o ponto de bezier
matriz.rotacao(angulo); // Faz a rotacao
matriz.translada(-pontoBezier.x, -pontoBezier.y); // Translada para a origem
// Novos pontos do carro
Ponto novoInferiorEsquerdo = multiplica(matriz.matriz, inferiorEsquerdo);
Ponto novoInferiorDireito = multiplica(matriz.matriz, inferiorDireito);
Ponto novoSuperiorEsquerdo = multiplica(matriz.matriz, superiorEsquerdo);
Ponto novoSuperiorDireito = multiplica(matriz.matriz, superiorDireito);
// Desenha o carro apos as transformacoes
color(1, 0, 0);
circleFillf(pontoBezier.x, pontoBezier.y, 4, 20);
linef(novoInferiorEsquerdo.x, novoInferiorEsquerdo.y, novoInferiorDireito.x, novoInferiorDireito.y);
linef(novoInferiorEsquerdo.x, novoInferiorEsquerdo.y, novoSuperiorEsquerdo.x, novoSuperiorEsquerdo.y);
linef(novoInferiorDireito.x, novoInferiorDireito.y, novoSuperiorDireito.x, novoSuperiorDireito.y);
linef(novoSuperiorEsquerdo.x, novoSuperiorEsquerdo.y, novoSuperiorDireito.x, novoSuperiorDireito.y);
// Ajusta a velocidade do carro:
setSpeed();
tempo += 0.001*speed;
if (buttonViewControlGraphs == true) // Se viewControlGraphs == true, mostra vetor de direcao do carro
{
color(0, 0, 1);
float moduloTangente = sqrt(pow(tangente.x, 2) + pow(tangente.y, 2));
tangente.x = (tangente.x / moduloTangente);
tangente.y = (tangente.y / moduloTangente);
linef(pontoBezier.x, pontoBezier.y, pontoBezier.x + tangente.x * 40, pontoBezier.y + tangente.y * 40);
/*Ponto inferiorEsquerdo(pontoBezier.x - 5, pontoBezier.y - 5);
Ponto inferiorDireito(pontoBezier.x + 5, pontoBezier.y - 5);
Ponto superiorEsquerdo(pontoBezier.x - 5, pontoBezier.y + 5);
Ponto superiorDireito(pontoBezier.x + 5, pontoBezier.y + 5);
if (angulo < 0)
{
angulo = angulo*(-1);
std::cout << angulo << std::endl;
}
// Realiza as transformacoes 2D (ordem inversa)
Matriz matriz; // Cria matriz de transformacao
matriz.translada(pontoBezier.x + tangente.x * 40, pontoBezier.y + tangente.y * 40); // Translada para o ponto de bezier
matriz.rotacao( 45); // Faz a rotacao
matriz.translada(-pontoBezier.x, -pontoBezier.y); // Translada para a origem
// Novos pontos do carro
Ponto novoInferiorEsquerdo = multiplica(matriz.matriz, inferiorEsquerdo);
Ponto novoInferiorDireito = multiplica(matriz.matriz, inferiorDireito);
Ponto novoSuperiorEsquerdo = multiplica(matriz.matriz, superiorEsquerdo);
Ponto novoSuperiorDireito = multiplica(matriz.matriz, superiorDireito);
color(1, 0, 0);
circleFillf(pontoBezier.x, pontoBezier.y, 4, 20);
//linef(novoInferiorEsquerdo.x, novoInferiorEsquerdo.y, novoInferiorDireito.x, novoInferiorDireito.y);
linef(novoInferiorEsquerdo.x, novoInferiorEsquerdo.y, novoSuperiorEsquerdo.x, novoSuperiorEsquerdo.y);
//linef(novoInferiorDireito.x, novoInferiorDireito.y, novoSuperiorDireito.x, novoSuperiorDireito.y);
linef(novoSuperiorEsquerdo.x, novoSuperiorEsquerdo.y, novoSuperiorDireito.x, novoSuperiorDireito.y);*/
}
//.........这里部分代码省略.........