上一篇文章记录了一些最简单直接的方法来建立模型,本篇就来讲一下如何动态建立此模型,以后无论几边形我们都可以以此来解决,废话不多说直接开打!
哈哈,搞定好像是初中或高中的某个知识点
在上面的基础上将圆沿着X轴方向移动Δx+r的距离;将圆沿着Y轴的方向移动Δy+r的距离,得到如下图:其中绿色的直角坐标系为原来的坐标系;由此可以得出A的坐标为: ( r • cosθ + r + Δx , r • sinθ + r + Δy )
终于到了激动人心的时刻了,绘制圆的内接正七边形
由于android view坐标的Y轴正方向是朝下的,所以我们在此讲正七边形倒置绘制,这样我们才能和android 坐标系对应起来;一般情况下我们在绘制多形图时,都是取一个点作为定点,如图中的C,以平行Y轴且过C点的直线作为多形图的轴线对称绘制,如图所示;有多边形的特性可得出: β = 2π / 7 , α = β - π/2 = - π/2 + β由于我们取C点特殊,所以得出:C (r + Δx , Δy)即 : [ r + Δx + r • cos( - π / 2 ),r +Δy + r • sin( - π / 2 ) ]B点相当于点C绕点O逆时针旋转 β 角 ,也就是 α = - π/2 + β 即 :B [ r + Δx + r • cos( - π/2 + β ) , r + Δy + r • sin( - π/2 + β ) ] 即 :B [ r + Δx + r • cos( - π/2 + 1 • β ) , r + Δy + r • sin( - π/2 + 1 • β ) ]所以正七边形的七个坐标分别为(从C点开始): 角 1 : [ r + Δx + r • cos( - π/2 + 0 • β ) , r + Δy + r • sin( - π/2 + 0 • β ) ] 角 2 : [ r + Δx + r • cos( - π/2 + 1 • β ) , r + Δy + r • sin( - π/2 + 1 • β ) ] 角 3 : [ r + Δx + r • cos( - π/2 + 2 • β ) , r + Δy + r • sin( - π/2 + 2 • β ) ] 角 4 : [ r + Δx + r • cos( - π/2 + 3 • β ) , r + Δy + r • sin( - π/2 + 3 • β ) ] 角 5 : [ r + Δx + r • cos( - π/2 + 4 • β ) , r + Δy + r • sin( - π/2 + 4 • β ) ] 角 6 : [ r + Δx + r • cos( - π/2 + 5 • β ) , r + Δy + r • sin( - π/2 + 5 • β ) ] 角 7 : [ r + Δx + r • cos( - π/2 + 6 • β ) , r + Δy + r • sin( - π/2 + 6 • β ) ]由上可知我们可以得出正N边形的个点坐标: 令正n边形的边数为n 则 β = 2π / n 所以正n边形各个定点坐标为: 角 1 : [ r + Δx + r • cos( - π/2 + 0 • β ) , r + Δy + r • sin( - π/2 + 0 • β ) ] 角 2 : [ r + Δx + r • cos( - π/2 + 1 • β ) , r + Δy + r • sin( - π/2 + 1 • β ) ] 角 3 : [ r + Δx + r • cos( - π/2 + 2 • β ) , r + Δy + r • sin( - π/2 + 2 • β ) ] 角 4 : [ r + Δx + r • cos( - π/2 + 3 • β ) , r + Δy + r • sin( - π/2 + 3 • β ) ] 角 5 : [ r + Δx + r • cos( - π/2 + 4 • β ) , r + Δy + r • sin( - π/2 + 4 • β ) ] • • • • • • • • • • • • • • • • • • • • • 角 n - 1 : { r + Δx + r • cos[ - π/2 + ( n - 2 ) • β ] , r + Δy + r • sin[ - π/2 + ( n - 2 ) • β ] } 角 n : { r + Δx + r • cos[ - π/2 + ( n - 1 ) • β ] , r + Δy + r • sin[ - π/2 + ( n - 1 ) • β ] }
两种计算七星图定点的坐标方法就算是讲完了,这样就可以开始我们的编码模块了,接下来我们将会使用这种动态的方式来计算绘制我们的七边形,在下一篇文章中我们将会进行编码模块,谢谢大家!