首页 > 解决方案 > 在直线上绘制一个点

问题描述

一条直线的方程是 Y = MX + C,

我有一个点和点面对的角度,所以我可以计算出直线方程

Slop := Tan(Rot)  // We  are passing radians to convert to gradient
C := (-Slop*X) + Y // Substitute our point XY values 

这就是我用来获取 Y 截距和斜率或梯度的当前数学。

但是我想知道如何在我们的起点前面绘制一个点 X 距离。

目前,我正在尝试以下内容,其中 Y2 和 X2 是我们原始点的值加上 100 个单位。

 NewPoint.X :=  Round( (Y2 - C) / Slop );
 NewPoint.Y := Round((slop*X2) + C);

这里是完整功能的粘贴箱:

https://pastebin.com/8435NzYc

谢谢。

标签: delphimathstraight-line-detection

解决方案


为了使事情更简单,用参数方程定义你的线:

X = X0 + UX * t
Y = Y0 + UY * t

哪里X0, Y0是某个基点的坐标,UX, UY是单位方向矢量的分量。注意

UX = Cos(Phi)
UY = Sin(Phi)

其中Phi是线与 OX 轴之间的角度。

另一方面,Tan(Phi)等于你的slope.

如果线由两点定义,则

Len = Hypot(X1 - X0, Y1 - Y0)
UX = (X1 - X0) / Len
UY = (Y1 - Y0) / Len

并且距离基点所需距离Dist的点只是

X = X0 + UX * Dist
Y = Y0 + UY * Dist

推荐阅读