画三角形2
依然是画如图所示的三角形
对于该问题可以分解为两个问题
1.如何画出picture 1和picture 2,
2.然后合并picture 1和picture 2
对于构成三角形的点,如果放在坐标系中看,可以看作一个一个的坐标。
尝试根据打印的规律建立坐标系。以三角形的行方向作为x轴,至上向下打印为正向;以三角形的列方向作为y轴,至左向右打印方向为正向。
则对于picture 1可以得到picture 3所示的坐标系
y
−
1
x
−
10
=
10
−
1
1
−
10
\frac{y-1}{x-10}=\frac{10-1}{1-10}
x−10y−1=1−1010−1
整理后得到直线1
x
+
y
−
11
=
0
x+y-11=0
x+y−11=0
经过(10,1)和(19,10)的直线2方程为
y
−
1
x
−
10
=
10
−
1
19
−
10
\frac{y-1}{x-10}=\frac{10-1}{19-10}
x−10y−1=19−1010−1
整理后得到
y
−
x
−
9
=
0
y-x-9=0
y−x−9=0
根据公式变成伪代码如下:
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11 = 0 or i-j-9 = 0:
print('*')
else:
print(' ')
对于picture 2而言可以理解为直线1与直线2所围成的区域
任意取三角形内的一点(2,10),可以判断出三角型围成的区域为:
L
(
x
,
y
)
=
{
x
+
y
−
11
>
0
y
−
x
−
9
<
0
x
≤
10
L(x,y)= \begin{cases} x+y-11>0 \\ y-x-9<0\\ x\leq10 \end{cases}
L(x,y)=⎩⎪⎨⎪⎧x+y−11>0y−x−9<0x≤10
转换成伪代码如下:
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11>0 and i-j-9 < 0:
print('*')
else:
print(' ')
为了得到picture1,我们应该综合以上两段代码如下
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11>=0 and i-j-9 <= 0:
print('*')
else:
print(' ')
在实际中的代码如下
打印三角形
for i in range(1,11):
for j in range(1,20):
#if i+j-11 >= 0 and i+9-j >= 0:
if i+j-11 >= 0 and j-9-i <= 0:
print('*',end=' ')
else:
print(' ',end=' ')
print('\t')
同时对于其他多边形也可以参考该思路得到