プログラミングのお題スレ Part3
■ このスレッドは過去ログ倉庫に格納されています
0233デフォルトの名無しさん
2014/02/22(土) 12:12:46.13import math
def f224(a, b, c=0.0):
""" 楕円を<hr>で表示するHTMLを出力
楕円 : (x/a)^2 + (y/b)^2 + 2*c*(x/a)*(y/b) = 1
ある y における x の座標: x = a*(c*y/b + sqrt((c*c-1)*y/b + 1))
y の範囲(最大値) : y = b/sqrt(1-c*c)
"""
a, b, c = [float(x) for x in (a, b, min(c,1.0))]
qq = []
max_y = b / math.sqrt(1-c*c)
for i in range(int(-max_y-0.5), int(max_y+0.5)+1):
Y = float(i) / b
D = max((c*c - 1.0)*Y*Y + 1.0, 0)
x1 = a*(-c*Y - math.sqrt(D))
x2 = a*(-c*Y + math.sqrt(D))
qq.append((x1, x2-x1))
ofs = min(x1 for (x1,w) in qq)
qq = [(int(x1-ofs+0.5), int(w)) for (x1,w) in qq]
print "<html>\n<head>\n</head>\n<body>"
for (x,w) in qq:
print "<hr width=%d align=left style=\"margin-left:%dpx;\">" % (w, x)
print "</body>\n</html>"
f224(300,20,0.5)
■ このスレッドは過去ログ倉庫に格納されています