仅给出一条直尺和一个罗盘,在给定的矩形内刻一个菱形,共享两个相对的点。
输入项
输入是矩形的尺寸。在所示的示例中,该值为125, 50
。您可以采用最方便的方式进行输入(如两个整数,列表,字符串等)。
较大的尺寸最小为100,而较小的尺寸最小为25。两者的上限均为200。
输出量
输出将是图像(显示在屏幕上或保存为文件),显示
- 输入矩形
- 所有“工作”线/圆
- 铭刻的菱形
以不同的颜色。在上图中,矩形为黑色,工作线为蓝色,菱形为橙色。线条应按照列表中显示的顺序绘制(例如菱形覆盖工作线和矩形)。
输出图像必须足够大以包含所有内容。例如,显示的圆圈不能超出范围。
方法
上面的示例图像中使用的方法是:
- 以左下角为中心,右上角为周长上的点绘制一个圆,其半径等于矩形的对角线。
- 进行相同的操作,但交换中心点和外围点。
- 在两个圆的交点之间画一条线,为矩形的对角线提供一个垂直平分线。
- 使用新线和矩形的交点绘制菱形。
之所以起作用,是因为菱形的内部对角线始终彼此垂直平分。不过,我这里没有提供完整的证明。
这不是获得菱形的唯一方法,并且可以在解释您正在做的事情的同时使用另一种方法。我相信这可能是最简单的。
规则
您只能绘制圆和直线(或直线段)。用中心点和周边点定义一个圆。一条线由任意两点定义。线不必具有任何指定的长度,但是它们必须至少覆盖定义点(请注意示例图像:线稍微越过圆交点,但不越过边缘)。对于圆,从中心到所选周边点的半径被视为一条工作线,必须显示。
要对线条进行栅格化,可以使用任何公认的算法(例如Bresenham算法),也可以依赖于您的语言可能具有的任何内置函数。如果您的输出是基于矢量的,请确保以至少与输入矩形(以像素为单位)一样大的分辨率显示。另外,您将在普通画布上绘画,因此请禁止显示任何网格标记或无关的输出。
别作弊!您只能使用到目前为止建立的内容来确定点/线/圆的位置。如果您无法解释如何使用工作线/圆来显示它是菱形,那说明您做错了。
您可以使用任意一对相对的点,并且只要输出正确,就不需要将矩形绘制为与轴对齐。
输入将始终是非正方形的矩形,因此不必担心会出现特殊情况。
最后,这是标准代码高尔夫,因此以字节为单位的最小大小获胜。