给定其他 2 个点、一个角度和一个距离的点
Point given 2 other points, an angle, and a distance
当我有另外两个点(origin
和 [=14] 时,我需要一个通用算法来计算一个点 (b
) 的 (x,y)
坐标=])、角度(angle
)和距离(distance
)。
它们将像这样使用,形成一个实体填充的径向进度指示器:
origin
位于 GUI 视图的中心
a
刚好超出视图的一个边缘
angle
是a
到origin
到b
的夹角
b
将被放置在视图边缘之外的其他地方,这样当从 a
到 origin
到 b
的路径被关闭并填充时,它们形成一个以一个点为中心,两条线向两侧延伸的形状。
distance
在功能上可以被认为是无限的。为了计算方便,可以认为它等于视图边界框的周长。
Example:
Where `o` is the origin and `A` is the angle:
a
. ------+
| |
+----|----+ |
| | | | I can draw more shapes as
| .A | --+ necessary to fill other
| o \ | | quadrants. I just need `A`
| \ | |
+-------\-+ |
\ |
\ |
\ |
\
.b
这样,通过更改 angle
的值并重新绘制视图,我可以获得倒计时时钟样式的形状。
如何在通用算法中找到 b
的坐标?(我将使用多种语言实现)
如果 a
直接在原点右侧并且只有 b
移动:
这假设 b
是 'leading' a
,记住角度总是逆时针测量的。在你的例子中 A
将是大外角,而不是小内角。如果你想让a
领先b
,就用-A
代替。
b = (dist x cos(A), dist x sin(A))
如果 a
不是直接向右,则必须添加 'starting angle'(在从原点向右移动形成的线与从原点到 [= 的线之间) 13=]) 到像这样的 alpha:
beta = angle(right, origin, a)
b = (dist x cos(A + beta), dist x sin(A + beta))
如果 origin
不在 (0, 0)
,您必须将这些坐标添加到 b.
b = (origin_x + (dist x cos(A + beta)), origin_y + (dist x sin(A + beta)))
当我有另外两个点(origin
和 [=14] 时,我需要一个通用算法来计算一个点 (b
) 的 (x,y)
坐标=])、角度(angle
)和距离(distance
)。
它们将像这样使用,形成一个实体填充的径向进度指示器:
origin
位于 GUI 视图的中心a
刚好超出视图的一个边缘angle
是a
到origin
到b
的夹角
b
将被放置在视图边缘之外的其他地方,这样当从a
到origin
到b
的路径被关闭并填充时,它们形成一个以一个点为中心,两条线向两侧延伸的形状。distance
在功能上可以被认为是无限的。为了计算方便,可以认为它等于视图边界框的周长。
Example:
Where `o` is the origin and `A` is the angle:
a
. ------+
| |
+----|----+ |
| | | | I can draw more shapes as
| .A | --+ necessary to fill other
| o \ | | quadrants. I just need `A`
| \ | |
+-------\-+ |
\ |
\ |
\ |
\
.b
这样,通过更改 angle
的值并重新绘制视图,我可以获得倒计时时钟样式的形状。
如何在通用算法中找到 b
的坐标?(我将使用多种语言实现)
如果 a
直接在原点右侧并且只有 b
移动:
这假设 b
是 'leading' a
,记住角度总是逆时针测量的。在你的例子中 A
将是大外角,而不是小内角。如果你想让a
领先b
,就用-A
代替。
b = (dist x cos(A), dist x sin(A))
如果 a
不是直接向右,则必须添加 'starting angle'(在从原点向右移动形成的线与从原点到 [= 的线之间) 13=]) 到像这样的 alpha:
beta = angle(right, origin, a)
b = (dist x cos(A + beta), dist x sin(A + beta))
如果 origin
不在 (0, 0)
,您必须将这些坐标添加到 b.
b = (origin_x + (dist x cos(A + beta)), origin_y + (dist x sin(A + beta)))