有四个点。要求判断前三个点是否能构成一个三角形,如果行,那第四个点是否在这个三角形内。
要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内? 问题点数:20、回复次数:20Top
1 楼Lewolf(无名)回复于 2005-10-18 23:22:09 得分 1
一个典型的算法问题了,解决的方法从数学角度就是转换为点和线的关系的问题,这是基本一个算法,求点在线的那一侧,在三角形内是一个点和三条线的关系了,多边型就是一个点和N-2个三角形的关系。当然还有计算机算法。Top
2 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2005-10-18 23:23:12 得分 1
数学问题Top
3 楼houbing_0123(冰河々C++ Builder々)回复于 2005-10-19 10:10:59 得分 2
有一个比较简单的算法(但可能不是很好),三点是不是成三角形和简单,判断三点是否一线就可以了啊,然后再判断第四个点和三个点连线形成的夹角是不是360度,如果不再三角形内好象夹角和没有360,具体比方为三角形ABC和第四个点D,判断∠ADB+∠ADC+∠BDC=360?Top
4 楼lucho(lucho)回复于 2005-10-20 10:05:17 得分 0
如何实现呢?Top
5 楼Maconel(Maconel)回复于 2005-10-20 11:18:20 得分 4
高中数学老师教够我们一个定理,叫什么名字忘了。
具体是:
在xy坐标系中,假设一个椭圆方程是ax^2 + by^2 + cx + dy + e = 0(记不清是不是这样了,先假定是吧)。
那么,
如果一个椭圆上的点(x1, y1)代入方程左半部,肯定=0。
如果一个椭圆内部的点(x2, y2)代入方程左半部,ax2^2 + by2^2 + cx2 + dy2 + e < 0,那么椭圆内部所有的点代入方程都会<0,同时椭圆外部的点都会>0。
这个定理所所有方程,包括抛物线,直线,以及任何曲线。
对于直线来说,xy坐标系被直线分成2部分,如果一侧的一个点<0,那么这边所有点都<0。
根据该定理,只要得到三角形内部一个点(这很容易,3条边中垂线交点即可),把它代入三条线的方程,看是>0还是<0,然后把第四个点也代入三个方程,看看是不是一样即可。
至于3点能不能构成一个三角形就更简单了,只要不是3点一线,就能构成三角形。
Top
6 楼Maconel(Maconel)回复于 2005-10-20 12:18:38 得分 0
抱歉,上面有个错误,就是三条边的中垂不一定在三角形内。
应该是三角形某顶点和对边中点的连线,这样的三条线中任意2条的交点应该在三角形内。
假定三角形3点是(x1,y1) (x2,y2) (x3,y3),那么(x1,y1)((x2-x3)/2),(y2-y3)/2)这2点可以得到一条直线。另外同理还可以得到2条。取其中2条线的方程组成一个2元一次方程组,解方程组即可得到交点,方程组应该很简单,先解好,把结果写成一个函数即可。Top
7 楼flowercity(菜农)回复于 2005-10-20 14:06:01 得分 2
斜率法来判断
一、判断其中三点时候共线
需要判断两次
二、判断最后一个点是否在三角形内部
判断两次,以一边为参考边,判断两点和边的两端点的斜率大小
就知道了
判断两次,求四次斜率Top
8 楼houbing_0123(冰河々C++ Builder々)回复于 2005-10-20 16:38:17 得分 1
算法都给了啊,实现当然要自己动手了啊,Top
9 楼leonatcs(LeonKennedy)(时常逛一逛csdn,有益身心健康。)回复于 2005-10-20 18:23:57 得分 1
判断是否能组成三角形就是判断是否共线,
计算直线AB和BC的斜率,看看是不是足够相近(long或double性的数据类型不能判断是否相等!)
就知道共不共线。
至于在不在三角形内,用API函数PtInRgn就可以了。(先用CreatePolygonRgn构造三角形)Top
10 楼gxd305()回复于 2005-10-20 18:38:00 得分 1
还是 leonatcs(LeonKennedy)的方法简单Top
11 楼xibingwuqing(惜冰无情)回复于 2005-10-20 18:58:15 得分 1
学习Top
12 楼GO3865258(GO希望我还行)回复于 2005-10-20 22:27:48 得分 1
没明白Top
13 楼Maconel(Maconel)回复于 2005-10-21 00:49:57 得分 1
leonatcs(LeonKennedy)(每天逛一逛csdn,有益身心健康。) 的方法写起来是简单,但是总不如自己写的好。Top
14 楼lucho(lucho)回复于 2005-10-24 23:24:19 得分 0
有谁有代码,不胜感激Top
15 楼XBox360(菜)(鸟)回复于 2005-10-25 10:34:02 得分 1
完全的数学问题,你先用数学的表达式写出来Top
16 楼lucho(lucho)回复于 2005-10-25 22:11:15 得分 0
谁有代码啊?郁闷... ...Top
17 楼free1949(大白菜,小胡子)回复于 2005-10-25 22:18:40 得分 1
搂主也未免太。。。。。。Top
18 楼leonatcs(LeonKennedy)(时常逛一逛csdn,有益身心健康。)回复于 2005-10-25 23:36:36 得分 1
呵呵,我也说呢,有够懒惰。Top
19 楼sxdoujg(无情过客)回复于 2005-10-26 11:28:29 得分 1
学习!Top
20 楼lucho(lucho)回复于 2005-11-30 18:56:09 得分 0
一个公司的面试题!!!Top




