The*_*978 7 math trigonometry coordinates
请参阅下面的快速图表.
我要做的是通过使用红点已知坐标的角度来获取黄点的坐标.假设每个黄点距离x:50/y约20个像素:直角250个红点(我认为这就是所谓的)我如何得到它们的坐标?
我相信这是非常基本的三角学,我应该使用Math.tan(),但他们并没有在艺术学校教我们太多的数学.
alt text http://www.freeimagehosting.net/uploads/e8c848a357.jpg
你实际上并不需要触发这个触发器.只需使用斜坡,或改变x和y.
给定一条斜率m = y/x线,垂直于该线的线具有斜率-1/m,或-x/y.
红点之间的斜率m是-150/150,或-1/1.我注意到了你的积极y观点.
因此,正斜率是1/1.你的x和y都以相同的速度变化,数量相同.
一旦你知道了,那么找出其余部分应该很容易.由于它们以45度角对齐,因此45-45-90三角形的边缘比率为1 : 1 : sqrt(2).因此,如果您的长度是20,则单个x和y的变化将是20/sqrt(2)或大致14为整数.
所以,你的两个黄点将是(36, 236),和(64, 264).如果线条未对齐到方便的程度,则必须使用arctan()或类似的东西,并获得线条和水平线之间的角度,这样您就可以计算出x和y变化的比率.
我希望我的回答不太难以理解.有关更一般的解决方案,请参阅Troubadour的回答.
编辑:由于OP说下面的红点实际上围绕上面的红点旋转,我们需要一个更灵活的解决方案.
我将从Troubadour的答案中扩展这个答案,因为我正在做同样的事情.当你读我的时,请参考他的帖子.
1.从原点(200,100)到旋转点(50,250)获取矢量:
vector = (200 - 50, 100 - 250) = (150, -150)
Run Code Online (Sandbox Code Playgroud)
2.通过交换x和y旋转矢量,并取消x以获得新矢量:
vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150)
Run Code Online (Sandbox Code Playgroud)
3.从新向量中获取单位向量(长度为1):
vector = vector / length(vector)
= (150 / length(vector), 150 / length(vector))
~= (0.7071, 0.7071)
where
length(vector) = sqrt(150^2 + 150^2) ~= 212.2320
Run Code Online (Sandbox Code Playgroud)
4.通过乘以单位矢量得到长度为20的位移矢量.
displacement_vector = vector * 20
= (0.7071 * 20, 0.7071 * 20)
= (14.1421, 14.1421)
Run Code Online (Sandbox Code Playgroud)
5.向/从旋转矢量(点)添加/减去此矢量:
yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254)
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236)
Run Code Online (Sandbox Code Playgroud)
我希望上述步骤可以帮助您制定代码.不管它的角度是什么,同样的步骤.