前に「カッシーニの卵形線」というのがあると聞いたので、手持ちの fx-CG50 upython で描いてみた、という小ネタです。
ref. カッシーニの卵形線 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%83%E3%82%B7%E3%83%BC%E3%83%8B%E3%81%AE%E5%8D%B5%E5%BD%A2%E7%B7%9A
2025-06-01 追記
やす親分から、線引きなどの機能を実現した module「u.py」のお知らせを戴きまして、大いに刺激を受け、改変致しました。親分、お世話になります !
こちらのページから u.py を取得して、導入しておいて下さい。
ref. Casio Python - ユーザー関数 line() - e-Gadget 様
https://egadget.blog.fc2.com/?no=764
座標軸の表示を盛り込みましたが、「目盛り」は盛り込んでおらんです。いずれの課題としておきます。
代わりに、デカルトの正葉線の式を追加致しました。
また、表示領域の指定をチョット凝るなどしております。
元々、関数の絶対値が指定の値よりも小さい時に 0 とみなして、点を打つ具合に動作しておりますから、正確な線と較べると、太くなってしまう所がります。
デカルトの正葉線のWikipedia をみると、媒介関数表示が出来るので、 fx-CG50 のグラフ機能できれいな線を描けます。比較してみると面白いと思います。
ref. デカルトの正葉線 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%AB%E3%83%AB%E3%83%88%E3%81%AE%E6%AD%A3%E8%91%89%E7%B7%9A
upython のコード ( 改訂新版 : やす親分の u.py module を使用します)
from u import *
from casioplot import *
#
def f(x,y):
return (x*x+y*y)*(x*x+y*y)-2*(x*x-y*y)-(1.02**4-1**4)
#
def f1(x,y):
return x*x*x-3*x*y-y*y*y
#
def scrSize() :
if isCG() :
return 384, 192
else :
return 384/3, 192/3
#
def axis(xs,xe,ys,ye):
i = int(-xs/(xe-xs)*width)
j = int(-ye/(ys-ye)*height)
line(0,j,width,j)
line(i,0,i,height)
#
def draw(func,xs,xe,ys,ye,eps):
for j in range(height):
for i in range(width):
x = (i*(xe-xs)/width +xs)
y = (j*(ys-ye)/height+ye)
if abs(func(x,y))<eps:
set_pixel(i,j)
# show graphix progressively
show_screen()
# main part
width, height = scrSize()
#xs,xe,ys,ye= -1.6,1.8,-0.7,0.9
xs,xe,ys,ye= -2.4,2.7,-1.05,1.35
eps=0.05
draw(f,xs,xe,ys,ye,eps)
axis(xs,xe,ys,ye)
( 参考 : 最初のコード )
from casioplot import *
#
def f(x,y):
return (x*x+y*y)*(x*x+y*y)-2*(x*x-y*y)-(1.02**4-1**4)
def draw():
width = 383
height = 191
xs=-1.8
xe= 1.8
ys=-0.9
ye= 0.9
eps=0.05
for j in range(height):
for i in range(width):
x = (i*(xe-xs)/width +xs)
y = (j*(ys-ye)/height+ye)
if abs(f(x,y))<eps:
set_pixel(i,j)
# show graphix progressively
show_screen()
draw()