盐城市城乡建设局网站/网站外部优化的4大重点
今晚本来想在女儿面前炫耀以下十年前自己用Java写的一个三角形判定小程序(https://blog.csdn.net/hpdlzu80100/article/details/2257671),让女儿随口说出三个数字,由程序判定以这三个数字为边长能否构成一个三角形。女儿报出的数字为:18,28,38,程序判定为可以构成三角形。然后我就很轻松的对女儿说,“好,看看爸爸把这个三角形给你画出来啊”。想着用Mathematica应该很快能画出来,没想到,这一画又是两个小时过去了。
结果如下:
代码如下:
triangle[a_?NumericQ, b_?NumericQ, c_?NumericQ] := Block[{x, y, pt, sqr}, sqr = #.# &;pt[a1_, b1_, c1_] := Reduce[sqr[{x, y}] == b1^2 && sqr[{x, y} - {a1, 0}] == c1^2 && y > 0, {x, y}];{(Polygon[{{0, 0}, {a, 0}, {x, y}}]), Text[Style[Framed[a, Background -> LightYellow], 11], {a/2, 0}], Text[Style[Framed[b, Background -> LightYellow], 11], {x/2, y/2}],Text[Style[Framed[c, Background -> LightYellow], 11], {(a + x)/2,y/2}]} /. ToRules[pt[a, b, c]]]g[{s1_, s2_, s3_}] := Graphics[{EdgeForm[Thick], FaceForm[None], triangle[s1, s2, s3]}, ImageSize -> {s1*20, s1*20}]
GraphicsGrid[{{g[{15, 20, 25}], g[{18, 28, 38}]}}]
代码亮点:
通过将Graphics函数的ImageSize选项的参数由固定值设置为与第一条边长s1成正比,实现了不同三角形大小的可对比性。
另外,虽然,Mathematica中有内置的函数可完成根据三角形三边长定义三角形,但是功能比较单薄。如下所示:
看来,“不怕不识货,就怕货比货”这句话同样使用于5000多种Mathematica内置函数啊。
另外,如果不需要显示标识边长的黄色文本框,代码如下:
效果如下:
如果将边长修改为30,30,59.989,则绘制的三角形就很“极品”了,肉眼已经难以识别出以下图形是个三角形了(压得太扁了),真好玩!
参考文章:
https://mathematica.stackexchange.com/questions/1472/how-do-i-draw-a-triangle-given-the-lengths-of-the-sides