小小的晒下

  声明:并没有要显示自己多么厉害。只是小小的激动了下,抑制不住内心的喜悦想要跟大家分享下。

  事情的原委是这样的:之前接到一个任务(以鼠标按下到松开之间为边长,画出一个正五角形)。

我一直拖到昨天才开始做,这里小小的自责下,如果真的对自己负责的,时间总会抽出来把事情做好。

前后总共花了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);            

   随便八一下关于整个事件的相关东西,在主管看来,他要的是在最少的时间内完成最优

的算法,都知道这里面有个平衡,在主管的立场算法是次要的,他要向他的上级交差,可放到

程序员身上他可能就会追求最优的算法,至少是他认为的最优。至于那个让不让讨论,我还是

暂时保留自己的意见。

  再来说下我的算法问题,我不知道划线接口里面有没有 利用极坐标划线的函数。如果有的

话整个画图在极坐标系也许更容易些。

 

  

posted on 2013-02-02 13:22  黑色圣光  阅读(170)  评论(0编辑  收藏  举报