小钱德勒很伤心。画他的云使他振作起来。
注意:画云实际上不会使他振作起来。
圆可以定义为三元组(x,y,r)
,其中x
是圆在笛卡尔平面上的x位置,是圆在笛卡尔平面y
上的y位置以及圆r
的半径。x
并y
可能是负面的。r
永远是积极的。输入是以空格分隔的三元组形式的圆的列表。例如:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
的3,1,1
意思是“在与中心点的圆3,1
与1个半径。3,2,1.5
是指”在与中心点的圆3,2
用1.5半径。
如果我们在图形上绘制输入的所有这些圆,则看起来像这样(我仅出于清晰起见添加了网格线和标签;它们不是必需的):
注意所有的圆是如何凝聚的。也就是说,它们全部重叠在一起,从而形成一个大的组,而没有其他的小圈子。输入保证是内聚的。
假设现在绘制一条绕这些圆形成的“边界”行进的线,而没有其他任何线。就像绘制所有圆组成的轮廓的边界一样。生成的云看起来像这样:
因此,仅通过在输入中绘制形成边界的圆弧来形成单一形状即可形成此云。换句话说,仅通过绘制不在另一个圆内的圆弧来形成云。您的程序将以上述形式接受输入,并输出显示结果云的图像。云的整体形状必须正确,但是比例,颜色,线条粗细以及在顶点处的外观取决于您。请注意,云必须是可见的,因此您不能拉出类似“此程序在白色背景上绘制白色云”,“此程序以无限小的比例绘制云”,“此程序以0绘制云”之类的内容。线宽”等。还请注意,边框的颜色必须与填充或背景的颜色不同。
另一个例子。输入:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
输出:
如果云中存在“洞”,则也应绘制该洞。输入:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
输出:
这是一条重要规则:您的程序必须仅绘制形成边框的线。这意味着您不能简单地完全绘制圆,然后用白色填充将圆绘制得稍小一些,因为该方法仍会绘制不形成边界的线,之后只会将其覆盖。该规则的目的是防止“绘制圆,然后用白色填充再次绘制圆”的实现或类似的方法。预计答案将在绘制之前实际计算出绘制对象的位置。
这是代码高尔夫球,因此最短的字符数获胜。