Gau*_*tam 10 language-agnostic drawing shape
如果中心为cx和cy
质心圆的半径,我如何绘制等边三角形?
如何找到一个点是否在三角形内?

PS:我正在构建这个android,但这个问题与语言无关.
Xan*_*tix 13
上图中的C点很简单,只是(cx,cy + r).
我可以想到两个相当简单的方法来获得点a和b:
第一种方法:假设(cx,cy)是原点并将C点旋转60度和120度以获得a和b.这可以通过以下公式实现:
第二种方法:绘制一条穿过(cx,cy)并具有-30度斜率的线.该线与圆相交的位置为b点.圆由以下等式定义:
( x - c.x )^2 + ( y - c.y )^2 = r^2
Run Code Online (Sandbox Code Playgroud)
(注意,将有两个交叉点,因此请选择正确的交叉点).
然后通过(cx,cy)以正30度角线进行相同操作以得到点a.
你的线会有斜率:1/sqrt(3)和-1/sqrt(3)
一旦得到形成等边三角形的点A,B和C,检测点(x,y)是否位于三角形中的最快和最简单的方法之一是基于叉积和向量.
基本上,看看(x,y)是否在"向量"A-> B的左侧.然后看看它是否在B-> C的左边.然后检查它是否在C-> A的左边.
从这里引用的以下方法可以检查点是否在向量的左侧.
public bool isLeft(Point A, Point B, Point C){
return ((B.x - A.x)*(C.y - A.y) - (B.y - A.y)*( C.x - A.x)) > 0;
}
Run Code Online (Sandbox Code Playgroud)
在方法A = line point1,b = line point2,c =指向要检查的点.
Rob*_*ert 11
对于只想要单位圆上等边三角形坐标的懒惰人(像我一样):
A: (-0.866, -0.5)
B: (0.866, -0.5)
C: (0.0, 1.0)
Run Code Online (Sandbox Code Playgroud)
对于不同的位置和/或半径,由乘法值r,然后添加cx到x坐标和cy到y秒。