GraphPlot的几个使用技巧

上次介绍了用Lua做的个绘制二元等式或不等式的图像的软件,今天增加了输出图片的功能,下载地址还是原来的。下面介绍几个使用技巧,这也正是这个软件的有趣之处。

1. 求余和周期函数

利用求余可以将一个图形变为一系列的图形,举几个例子:

对直线的截距求余,y=x+d → (y-x)%d=0,例如:(y-x)%20 == 0

 

对直线的倾角求余,y=tgθx → atan(y/x)%θ=0,例如:abs(atan(y/x)%0.2)<0.005

 

对圆的半径求余,sqrt(x^2+y^2)=r → sqrt(x^2+y^2)%r=0, 例如:abs(sqrt(x^2+y^2)%10)<0.1

 

求余是一个周期函数,使用其他的周期函数也可以做,比如:abs(cos((x-y)/3)-1)<0.001

 

2. 平移和缩放

把f(x,y)=0水平方向平移a,竖直方向平移b后的方程是f(x-a,y-b)=0,缩放则是乘一个因子f(u*x, v*y)=0。

比如:(x/2-25)^2+(y-50)^2<200

3. 求绝对值,变换正负号,交换x和y

通过求绝对值,变换正负号,可以改变图形的对称性;交换x和y使图形旋转90度。

比如:abs(y+x^2)<0.1 or abs(x+y^2)<0.1

 

4. 不等式

使用不等号可以画面积,等式对精度要求比较高,画不等式则容易一些。

比如圆和圆环:(x+50)^2+y^2<900 or abs((x-50)^2+y^2-900)<100

通常用画很细的圆环作为画圆圈的近似。

 

5. 交集、并集、补集

用and求交集,or求并集,not求补集。

例如:((x+40)^2+y^2<900 or x^2+y^2<900) and not((x+40)^2+y^2<900 and x^2+y^2<900)

 

6. 自定义函数

可以在Favorites.lua文件中自定义函数,并用在表达式里。

比如定义:

function balls(x,y)
    
for n = 02*pi, pi/4 do
        
if (x-60*cos(n))^2+(y-60*sin(n))^2<100 then return true end
    
end
   
return false
end

绘制表达式:balls(x,y)

模拟极坐标,画心形:

function heart(x, y)
for t = 0, 2*pi, pi/40 do
if abs(x-16*sin(t)^3)<0.1 and abs(y-13*cos(t)+5*cos(2*t)+2*cos(3*t)+cos(4*t))<0.1 then
return true
end
end
return false
end

Favorite目录中加入{leafname = "heart", tip = "heart(x, y)", config = {Xmin=-20, Xmax=20, Ymin=-20,Ymax=20,Split=4}}

通过灵活地组合应用这些技巧,就可以画各种想要的图形。

 

posted @   刘俊峰  阅读(2160)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示