qt qgraphicsview 一个角的三点坐标,计算角内到两边距离相等的一点坐标
时间: 2024-03-05 15:52:54 浏览: 71
假设需要计算三角形的顶点为p1,另外两个点为p2和p3,且p2、p3两边到角内点的距离相等。可以按照以下步骤计算:
1. 计算三角形两条边的向量。可以使用QLineF类的构造函数计算。
2. 计算两条边的长度,以及角内点到p2边的距离d。
3. 计算角内点到p2边的向量v,v = edge1 * (d/len1)。
4. 计算角内点的坐标p,p = p2 + v。
下面是一个示例代码:
```c++
QPointF p1, p2, p3; // 三个点的坐标
QLineF edge1(p2, p1), edge2(p2, p3); // 计算两条边的向量
double len1 = edge1.length(); // 计算边1的长度
double d = 50; // 假设d为50
QPointF v = edge1.unitVector().pointAt(d/len1) * d; // 计算角内点到p2边的向量
QPointF p = p2 + v; // 计算角内点的坐标
```
其中,edge1.unitVector().pointAt(d/len1)表示edge1的单位向量,并将其乘以d/len1得到长度为d的向量。
相关问题
qt qgraphicsview 一个角的三点坐标,计算角内到两边距离不定相等的一点坐标
假设需要计算三角形的顶点为p1,另外两个点为p2和p3,且p2、p3两边到角内点的距离不相等。可以按照以下步骤计算:
1. 计算三角形两条边的向量。可以使用QLineF类的构造函数计算。
2. 计算两条边的长度,以及角内点到p2边的距离d1和到p3边的距离d2。
3. 计算d1和d2的比例k,即k=d1/(d1+d2)。
4. 计算角内点到p2边的向量v1,v1 = edge1 * k。
5. 计算角内点到p3边的向量v2,v2 = edge2 * (1-k)。
6. 计算角内点的坐标p,p = p2 + v1 + v2。
下面是一个示例代码:
```c++
QPointF p1, p2, p3; // 三个点的坐标
QLineF edge1(p2, p1), edge2(p2, p3); // 计算两条边的向量
double len1 = edge1.length(), len2 = edge2.length(); // 计算两条边的长度
double d1 = 50, d2 = 100; // 假设d1和d2分别为50和100
double k = d1 / (d1 + d2); // 计算比例k
QPointF v1 = edge1.unitVector().pointAt(d1/len1) * k; // 计算角内点到p2边的向量
QPointF v2 = edge2.unitVector().pointAt(d2/len2) * (1-k); // 计算角内点到p3边的向量
QPointF p = p2 + v1 + v2; // 计算角内点的坐标
```
其中,edge1.unitVector().pointAt(d1/len1)表示edge1的单位向量,并将其乘以d1/len1得到长度为d1的向量。
qt qgraphicsview 根据一个角的三点坐标,获取角平分线上到两边任意距离的任意一点
假设有一个角ABC,其中A、B、C为三个点。现在我们需要在角平分线上找到一个点D,使得点D到线段AB和AC的距离分别为L1和L2。
首先,我们需要计算出角ABC的一半的角度phi。可以使用以下公式计算:
phi = atan2(y3 - y1, x3 - x1) - atan2(y2 - y1, x2 - x1)
其中(x1, y1)、(x2, y2)、(x3, y3)分别为点A、B、C的坐标。
接下来,我们需要计算出角平分线的向量V。可以使用以下公式计算:
V = (x3 - x1, y3 - y1)
我们需要将向量V归一化,使其长度为1。可以使用以下公式计算:
U = V / sqrt(V.x * V.x + V.y * V.y)
接下来,我们需要计算出角平分线的交点P。可以使用以下公式计算:
P = A + t * U
其中A为点A的坐标,t为实数。
接下来,我们需要计算出向量U的垂直向量W。可以使用以下公式计算:
W = (-U.y, U.x)
接下来,我们可以使用以下公式计算出点D的坐标:
D = P + W * L1 / sqrt(W.x * W.x + W.y * W.y)
其中*代表点乘,/代表除法,^代表平方。
但是,这个点D可能不在线段AC上,而是在延长线AC上。我们需要判断点D是否在线段AC上,如果不在,则需要反转线段AB和AC的顺序,并重新计算一次点D的坐标。
具体地,我们需要计算出向量AD和DC,然后计算它们的点积。如果点积小于0,则说明点D在延长线AC上。此时,我们需要交换点B和点C,重新计算点D的坐标。可以使用以下代码实现:
```
AD = D - A
DC = C - D
if dot(AD, DC) < 0:
temp = B
B = C
C = temp
L1, L2 = L2, L1
D = P + W * L1 / sqrt(W.x * W.x + W.y * W.y)
```
最后,我们就可以得到点D的坐标了。
阅读全文
相关推荐















