第一个题在判断完重点后判断是否三点共线就行了吧……
如果应聘的工作只是些应用层的开发....这种题目就真的是白痴了....
如果应聘的工作是关于游戏又或者gdi方面的,这题出的不错
我见到的一个简单的算法是计算面积来判断,
如果为三角形,则三点构成的面积应该大于0,如果某点在三角形内,则该点与三角形的顶点构成的三角形面积之和相等。
所以这个问题的实质就是计算任意三点构成的三角形面积之和,而这就是一个公式。
由以上可见,对程序的学习主要是对算法的理解和运用,其次是对程序设计理论的掌握。
第一问:
设三个点坐标为(x1,y1),(x2,y2),(x3,y3)
直接判断S=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)即可
若S=0则。。
实质是求两个向量的叉乘表示相应的平行四边形面积
你在判断2边之和大于第3边时候,应该用加法,要不如果溢出,就出错。
你在判断2边之和大于第3边时候,不应该用加法,要不如果溢出,就出错,应该用减法,不好意思写错了。
如果为三角形,则三点构成的面积应该大于0,如果某点在三角形内,则该点与三角形的顶点构成的三角形面积之和相等。
同意
从招聘者的角度去想问题,可能考的并不是算法,而是代码风格,容错处理,面向对象,人机操作的友好性,还有就是是否考虑了所有的情况(问题的全面性)
你们回忆一下初中学的斜率,然后很快可以写出最简捷的第一道题,然后第二道题只须确定 点在对应 任意两个端点的斜线的斜率应该在其两个边之内。
如果有人对Html转换xml分析机有兴趣请加我的MSN : parasite_eve_md@msn.com
我的解题思路是这样:
1、
A(x1,y1)
B(x2,y2)
C(x3,y3)
P(x4,y4)
2、
以A、B和C中X最小作为原点做坐标平移(这里假设A点的X最小):
A(0,0)
B(Xb,Yb), Xb=x2-x1,Yb=y2-y1
C(Xc,Yc), Xc=x3-x1,Yc=y3-y1
P(Xp,Yp), Xp=x4-x1,Yp=y4-y1
3、
AB的斜率为K(AB)=Yb/Xb,Yb<>0
AC的斜率为K(AC)=Yc/Xc,Xc<>0
4、
若K(AB) <> K(AC),则ABC可以画三角形
5、
下面3个条件同时成立的时候,点P在三角形ABC内
5.1、Xp>0
第2步坐标平移后保证了三角形在X轴的右边
5.2、Min(K(AB),K(AC))<K(AP)<Max(K(AB),K(AC))
AP的斜率为K(AP)=(Yp/Xp,Xp<>0
5.3、点P在直线BC的左边或者下面
通过BC两点构造直线BC的方程为:
ax+by+c=0,(a>0)
a=Yb-Yc,b=Xc-Xb,c=Yc×Xb-Xc×Yc(如果(Yb-Yc)<0,则a,b,c同时乘以-1:必须保证a>0)
令f(x)=ax+by+c,现在把P(Xp,Yp)代入:
f(x) = a×Xp+b×Yp+c
如果f(x)<0,则P在直线BC左侧或下侧;
f(x)>0,则P在直线BC右侧或上侧;
f(x)=0,则P在直线BC上.
任意两点连成直线,只要第三点不在这条线上就可以是三角形了,这样比较简单,不过只限于二维。
不管怎样
凡是用到斜率的,都要考虑与Y轴平行的情况,
凡是考虑叉积求面积的都要注意面积的正负问题!
个人认为看点是否在三角形内部与否,用叉积结果的绝对值来计算是最省脑细胞的办法!
@jasmineou
即使是应用开发也会涉及到界面设计啊?
友好的界面设计是一个软件是否成功的很大看点!!!
某些情况下可视化编程也不是万能的,自己可能要亲自设计界面控件的哦!~~