开发笔记

  • 首页
  • 工具箱
三味线的博客
  1. 首页
  2. C++
  3. 正文

求直线上某点坐标

2019-06-20 2413点热度 7人点赞 0条评论

已知直线上两点坐标,以及起点到两点之间某点的距离,求该点坐标。

方位角

方位角:指北方向顺时针与直线的夹角;

间距(从起点开始一段距离)为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));
	}
}
标签: C++ Qt
最后更新:2020-06-06

三味线

不吃咸鱼的喵

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Captcha Code

COPYRIGHT © 2022 voidcat.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备18010095号-1