Qt cpp QPainter 实现绘制 。已知 point B。以点B为顶点绘制等腰三角形S。S的腰长为106,底边长为80,S的高斜率为k。求出S 三个顶点的坐标。
时间: 2024-02-20 22:58:58 浏览: 117
根据题目描述,我们已知点B的坐标,以及三角形S的底边长和腰长,以及高的斜率k。接下来,我们可以按照以下步骤求出S三个顶点的坐标:
1. 求出S底边中点M的坐标,即:
```
M.x = B.x
M.y = B.y + 40
```
2. 求出S高的长度H,即:
```
H = 106 / 2 * sqrt(1 + k^2)
```
3. 求出S顶点C的坐标,即:
```
C.x = M.x + H / sqrt(1 + k^2)
C.y = M.y - k * H / sqrt(1 + k^2)
```
4. 求出S另一个顶点D的坐标,即:
```
D.x = 2 * M.x - C.x
D.y = 2 * M.y - C.y
```
综上所述,S三个顶点的坐标分别为:C、B、D。
以下是实现绘制的代码示例:
```cpp
void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
// 已知点B的坐标
QPoint B(200, 200);
// 已知S的底边长和腰长,以及高的斜率k
qreal base = 80;
qreal waist = 106;
qreal k = 0.5;
// 求出S底边中点M的坐标
QPoint M(B.x(), B.y() + waist / 2);
// 求出S高的长度H
qreal H = waist / 2 * sqrt(1 + pow(k, 2));
// 求出S顶点C的坐标
QPoint C(M.x() + H / sqrt(1 + pow(k, 2)), M.y() - k * H / sqrt(1 + pow(k, 2)));
// 求出S另一个顶点D的坐标
QPoint D(2 * M.x() - C.x(), 2 * M.y() - C.y());
// 使用QPainter绘制三角形
QPainter painter(this);
painter.setPen(QPen(Qt::black, 2));
painter.drawLine(C, B);
painter.drawLine(B, D);
painter.drawLine(D, C);
}
```
运行程序后,会绘制出以点B为顶点的等腰三角形S,三个顶点的坐标分别为C、B、D。
阅读全文