Qt cpp QPainter 实现绘制 。已知 point A、point B。以点B为顶点绘制等腰三角形SA。SA的腰长为106,底边长为80,SA高的方向为BA所在直线。求出SA 三个顶点的坐标。
时间: 2024-02-20 22:58:52 浏览: 17
根据题目描述,我们可以得到点A和点B的坐标,以及三角形SA的底边长和腰长。接下来,我们可以按照以下步骤求出SA三个顶点的坐标:
1. 求出BA直线的斜率k,即:
```
k = (B.y - A.y) / (B.x - A.x)
```
2. 求出BA直线的方程,即:
```
y - B.y = k * (x - B.x)
```
3. 求出SA底边的中点M坐标,即:
```
M.x = (A.x + B.x) / 2
M.y = (A.y + B.y) / 2
```
4. 求出SA高H的长度,即:
```
H = sqrt(106^2 - 40^2) ≈ 97.94
```
5. 求出SA顶点C的坐标,即:
```
C.x = M.x + H / sqrt(1 + k^2)
C.y = M.y + k * (C.x - M.x)
```
6. 求出SA另外一个顶点D的坐标,即:
```
D.x = 2 * M.x - C.x
D.y = 2 * M.y - C.y
```
综上所述,SA三个顶点的坐标分别为:A、C、D。
相关问题
Qt cpp QPainter 实现绘制 。已知 point A、point B。以点B为顶点绘制等腰三角形SA。SA的腰长为106,底边长为80,SA高的方向为BA所在直线。求出SA 三个顶点的坐标。 并使用QPainter绘制
以下是实现绘制的代码示例:
```cpp
void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
// 已知点A和点B的坐标
QPoint A(100, 100);
QPoint B(200, 200);
// 求出BA直线的斜率k
qreal k = (B.y() - A.y()) / (B.x() - A.x());
// 求出SA底边的中点M坐标
QPoint M((A.x() + B.x()) / 2, (A.y() + B.y()) / 2);
// 求出SA高H的长度
qreal H = sqrt(pow(106, 2) - pow(80 / 2, 2));
// 求出SA顶点C的坐标
QPoint C(M.x() + H / sqrt(1 + pow(k, 2)), M.y() + k * (C.x() - M.x()));
// 求出SA另外一个顶点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(A, B);
painter.drawLine(B, C);
painter.drawLine(C, D);
}
```
运行程序后,会绘制出以点B为顶点的等腰三角形SA,三个顶点的坐标分别为A、C、D。
Qt cpp QPainter 实现绘制 。已知 point B。以点B为顶点绘制等腰三角形S。S的腰长为106,底边长为80,S的高斜率为k。求出S 三个顶点的坐标。
根据题目描述,我们已知点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。