已知直线上两点坐标,以及起点到两点之间某点的距离,求该点坐标。
方位角
方位角:指北方向顺时针与直线的夹角;
间距(从起点开始一段距离)为R;
两点之间的距离 S = sqrt(pow(x2-x1, 2) + pow(y2-y1, 2));
方位角: F = atan((y2-y1)/(x2-x1));
X = x1 + R * cos(F);
Y = y1 + R * sin(F);
计算
参考方位角概念,这里考虑了上、下、左、右、左上、左下、右上、右下8个方向的情况;
QPointF startPt = ;//起点 QPointF endPt = ;//终点 qreal dist = ;//线段长 qreal curDist = ;//间距 QPointF nextPos = startPt;//目标点 if (endPt.x() == startPt.x()) { if (endPt.y() > startPt.y()) { nextPos.setY(startPt.y() + curDist); } else if (endPt.y() < startPt.y()) { nextPos.setY(startPt.y() - curDist); } } else if (endPt.y() == startPt.y()) { if (endPt.x() > startPt.x()) { nextPos.setX(startPt.x() + curDist); } else if (endPt.x() < startPt.x()) { nextPos.setX(startPt.x() - curDist); } } else if (endPt.x() < startPt.x()) { if (endPt.y() < startPt.y()) { qreal delta = qAtan((endPt.y() - startPt.y()) / (endPt.x() - startPt.x())); nextPos.setX(startPt.x() - curDist * qCos(delta)); nextPos.setY(startPt.y() - curDist * qSin(delta)); } else if (endPt.y() > startPt.y()) { qreal delta = qAtan((endPt.y() - startPt.y()) / (startPt.x() - endPt.x())); nextPos.setX(startPt.x() - curDist * qCos(delta)); nextPos.setY(startPt.y() + curDist * qSin(delta)); } } else if (endPt.x() > startPt.x()) { if (endPt.y() < startPt.y()) { qreal delta = qAtan((startPt.y() - endPt.y()) / (endPt.x() - startPt.x())); nextPos.setX(startPt.x() + curDist * qCos(delta)); nextPos.setY(startPt.y() - curDist * qSin(delta)); } else if (endPt.y() > startPt.y()) { qreal delta = qAtan((endPt.y() - startPt.y()) / (endPt.x() - startPt.x())); nextPos.setX(startPt.x() + curDist * qCos(delta)); nextPos.setY(startPt.y() + curDist * qSin(delta)); } }
文章评论