三角形顺时针旋转90度
时间: 2023-08-18 07:10:24 浏览: 166
假设三角形的三个顶点为 A(x1, y1), B(x2, y2), C(x3, y3),将三角形顺时针旋转90度后,其新的顶点坐标为 A'(x1', y1'), B'(x2', y2'), C'(x3', y3'),则旋转后的坐标计算公式如下:
x1' = y1
y1' = -x1
x2' = y2
y2' = -x2
x3' = y3
y3' = -x3
其中,x1', y1' 为点 A' 的坐标,x2', y2' 为点 B' 的坐标,x3', y3' 为点 C' 的坐标。
相关问题
在html页面中使用js输出一由“*”组成绕顺时针旋转90度的三角形
请参考下面的代码实现:
```html
<!DOCTYPE html>
<html>
<head>
<title>绕顺时针旋转90度的三角形</title>
<style>
.rotate-90 {
transform: rotate(90deg);
transform-origin: top right;
-webkit-transform: rotate(90deg);
-webkit-transform-origin: top right;
-moz-transform: rotate(90deg);
-moz-transform-origin: top right;
-o-transform: rotate(90deg);
-o-transform-origin: top right;
-ms-transform: rotate(90deg);
-ms-transform-origin: top right;
}
</style>
</head>
<body>
<script>
var str = '*****\n**** \n*** \n** \n* ';
var rows = str.split('\n');
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
for (var j = 0; j < row.length; j++) {
var char = row.charAt(j);
if (char === ' ') {
document.write(' ');
} else {
document.write('*');
}
}
document.write('<br>');
}
</script>
<div class="rotate-90">
<script>
var str = '*****\n**** \n*** \n** \n* ';
var rows = str.split('\n');
for (var i = rows.length - 1; i >= 0; i--) {
var row = rows[i];
for (var j = 0; j < row.length; j++) {
var char = row.charAt(j);
if (char === ' ') {
document.write(' ');
} else {
document.write('*');
}
}
document.write('<br>');
}
</script>
</div>
</body>
</html>
```
这个代码中,我们先定义了一个旋转90度的CSS样式,然后通过JavaScript输出了一个由星号组成的绕顺时针旋转90度的三角形。具体来说,首先我们把三角形用一个含有换行符的字符串表示出来,然后使用`split()`方法按照换行符将它分割成数组,接着循环遍历数组的每一行,并对每一行中的每一个字符进行判断,如果是空格则输出` `,否则输出星号。循环结束后,将整个三角形包裹在一个使用了旋转90度的CSS样式的`div`元素中,再次遍历三角形数组进行输出,此时需要注意遍历顺序,因为我们要实现顺时针旋转90度的效果,所以需要从最后一行开始输出,并且每一行从右往左输出。
QOpenGLWidget顺时针旋转
要在QOpenGLWidget中进行顺时针旋转,可以使用OpenGL的旋转变换函数glRotatef()。下面是一个简单的例子,演示了如何使用QOpenGLWidget进行顺时针旋转:
```python
from PyQt5.QtWidgets import QApplication, QOpenGLWidget
from PyQt5.QtGui import QPainter, QOpenGLPaintDevice
from PyQt5.QtCore import Qt
from OpenGL.GL import *
class MyGLWidget(QOpenGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 设置OpenGL版本
fmt = QOpenGLPaintDevice.defaultFormat()
fmt.setVersion(3, 3)
fmt.setProfile(QSurfaceFormat.CoreProfile)
self.setFormat(fmt)
def initializeGL(self):
glClearColor(0, 0, 0, 1)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT)
# 保存当前矩阵
glPushMatrix()
# 顺时针旋转 30 度
glRotatef(30, 0, 0, 1)
# 绘制一个三角形
glBegin(GL_TRIANGLES)
glColor3f(1, 0, 0)
glVertex3f(-0.5, -0.5, 0)
glColor3f(0, 1, 0)
glVertex3f(0.5, -0.5, 0)
glColor3f(0, 0, 1)
glVertex3f(0, 0.5, 0)
glEnd()
# 恢复之前的矩阵
glPopMatrix()
def resizeGL(self, w, h):
glViewport(0, 0, w, h)
```
在这个例子中,我们重载了QOpenGLWidget的三个函数:initializeGL、paintGL和resizeGL。在initializeGL函数中,我们设置了背景颜色为黑色。在paintGL函数中,我们先清空窗口,然后使用glPushMatrix()函数保存当前矩阵,再使用glRotatef()函数进行旋转变换,最后绘制一个三角形。在恢复之前的矩阵之前,我们需要使用glPopMatrix()函数将矩阵栈弹出。在resizeGL函数中,我们设置了OpenGL视口的大小。
使用这个QOpenGLWidget,你可以创建一个窗口,并在其中绘制一个旋转的三角形。