1、本文的目的,不是为了解决某一个特定的问题,而是想通过Mathematica的强大的运算能力,开发一系列的角格点问题。我们考虑一般问题:△ABC内部有一点D,∠ABD=b°,∠CBD=a°,∠BCD=d°,∠ACD=c°,且∠BAD的度数和a、b、c、d都是正整数。
2、用《几何表达式》可以算出,∠BAD的度数的表达式:
3、我们只要给a、b、c、d赋以具体的数值,就可以得到对应的角度(一般是弧度值,需要转化)。f/.{a->30,b->30,c->20,d->20}
4、眼尖的同学大概一眼就可以发现,在{a->30,b->30,c->20,d颍骈城茇->20}的时候,D就是△ABC的内接圆圆心,进而AD平分∠BAC。然而,Mathemati艘早祓胂ca却不知道这一点,因此需要专门化简:f/.{a->30,b->30,c->20,d->20}//FullSimplify
5、回归正题,先假定a、b为定值,怎么给c、d赋值呢?这里用Table。Table[f,{c,1,180-30-36-1,1},{d,1,180-c-30-36-1,1}]结果得到一大堆数据:
6、这些数据里面有多少个数字呢?有6328个。Table[f,{c,1,180-30-36-1,1},{d,1,180-c-30-36-1,1}]//Flatten//Length
7、下面,我们用If函数,来把这里面,能够使f是正整数的c和d单独找出来:但是仍旧是大海捞针。
8、用Union把重复的元素,给它合并起来:这样是不是就很清楚了呢?
9、选择其中一组数据,进行检验,可以用《几何表达式》算出结果。
10、然后,再把b的值也视为变量,看看效果如何:此时获得的数据明显就比较多了。
11、选择一组数据,画出相应图形,就会发现,这种情形非常简单,基本属于送分的题目。
12、所以,需要把这些过于简单的题目剔除出去:((a-b)^2/.ru)+(c-d)^2>0可以确保D不是内接圆圆心;((a-b)^2/.ru)+(Floor[f+0.]-颊俄岿髭d)^2>0&&((a-(180-a-b-c-d-Floor[f+0.]))^2/.ru)+(c-d)^2>0&&((Floor[f+0.]-(180-a-b-c-d-Floor[f+0.]))^2/.ru)+(c-b)^2>0可以确保△ABD、△ACD、△BCD彼此不会全等。这样,还是得到了100多组数据,而且每一个都不会很简单。
13、我们可以把数据做成表格的形式,便于查询。