小小的晒下
声明:并没有要显示自己多么厉害。只是小小的激动了下,抑制不住内心的喜悦想要跟大家分享下。
事情的原委是这样的:之前接到一个任务(以鼠标按下到松开之间为边长,画出一个正五角形)。
我一直拖到昨天才开始做,这里小小的自责下,如果真的对自己负责的,时间总会抽出来把事情做好。
前后总共花了5个小时(时间很长,大大超过了我的预期)确定5个点的位置,等到自己真正的完成后想要
找人确认下自己的算法(暂且叫做算法)是否是最优的。刚出炉的小白总是希望的到别人认同的。就和同事
讨论,结果主管发现说不许讨论。(只有我一个人在做,同事之前都做过了)其实原本可以私下了和自己的
哥们们聊下,可是放假期间他们都提前回家了。我挺纳闷的我已经自己独立完成了,我只是想要确认下自己
的算法,(顺便显示下自己的能力,虽然很差)。算我小人之心吧,只能想到 不让讨论是怕我偷袭别人的成
果。于是决定写博记下跟大家分享下自己的算法,在写博的当中发现自己的心开始沉淀下来,没有当初那种
想要把自己的成果跟别人炫耀下的冲动了。
最后把自己的代码 贴出来。说下总体的思路根据线段的两点(p1,p2)算出其他三点(p3,p4,p5)的位
置,然后依次连线p1p2p3p4p5p1.这个里面主要用到先把直角坐标系下的点转换到极坐标系,这样方便确定
其它三点的位置,最后在把极坐标下的转换的之交坐标下。应该贴图会很直观可惜自己水平有限,后期补上。
double x=p2.x-p1.x; double y=p2.y-p1.y; double r=sqrt(x*x+y*y); double r1=sqrt(2*r*r-2*r*r*cos(PI/5));//余弦定理 double angle=acos(x/r); if(y<0) { angle=2*PI-angle; } p3.x=p1.x+r1*cos(angle+2*PI/5); p3.y=p1.y+r1*sin(angle+2*PI/5); p4.x=p1.x+r1*cos(angle-PI/5); p4.y=p1.y+r1*sin(angle-PI/5); p5.x=p1.x+r*cos(angle+PI/5); p5.y=p1.y+r*sin(angle+PI/5);
随便八一下关于整个事件的相关东西,在主管看来,他要的是在最少的时间内完成最优
的算法,都知道这里面有个平衡,在主管的立场算法是次要的,他要向他的上级交差,可放到
程序员身上他可能就会追求最优的算法,至少是他认为的最优。至于那个让不让讨论,我还是
暂时保留自己的意见。
再来说下我的算法问题,我不知道划线接口里面有没有 利用极坐标划线的函数。如果有的
话整个画图在极坐标系也许更容易些。