[Erlang] 纯文本查看 复制代码 .版本 2
.子程序 画爱心
.参数 目标画板, 画板
.局部变量 t_整数, 整数型
.局部变量 t_浮点, 双精度小数型
.局部变量 x_笛卡尔, 双精度小数型
.局部变量 y_笛卡尔, 双精度小数型
.局部变量 缩放比例, 双精度小数型
.局部变量 中心X, 整数型
.局部变量 中心Y, 整数型
.局部变量 屏幕X, 整数型
.局部变量 屏幕Y, 整数型
.局部变量 循环上限, 整数型
.局部变量 点数组, 整数型, , "0"
.局部变量 点索引, 整数型
' 清空画板并设置背景色
目标画板.画板背景色 = #白色 ' 设置一个浅色背景
目标画板.清除 (, , , )
' 设置画笔和刷子(用于填充)
目标画板.画笔颜色 = #红色 ' 轮廓颜色
目标画板.画笔粗细 = 2 ' 轮廓粗细
目标画板.刷子颜色 = #品红 ' 填充颜色,选择一个粉色系
目标画板.刷子类型 = 5 ' 确保是实心填充
' 计算画板中心点
中心X = 目标画板.宽度 ÷ 2
中心Y = 目标画板.高度 ÷ 2
' 调整缩放比例,使爱心能完整显示在画板中
' 笛卡尔心形线参数方程的输出范围大致是 X: [-16, 16], Y: [-13, 5] (根据系数)
' 实际绘制时,为了美观,可能需要进一步调整缩放因子
缩放比例 = 目标画板.取用户区宽度 () ÷ 35 ' 假设爱心宽度为32个单位 (16*2),留边距
.如果 (目标画板.取用户区高度 () ÷ 20 < 缩放比例) ' 假设爱心高度为18个单位 (13+5),留边距
缩放比例 = 目标画板.取用户区高度 () ÷ 20
.否则
.如果结束
缩放比例 = 缩放比例 × 0.9 ' 留一些边距,并微调
' 循环绘制爱心曲线,并收集点
' t 的范围通常是 0 到 2 * PI (约 6.28)
' 我们将 0 到 2 * PI 映射到一个较大的整数范围,例如 0 到 6280
' 这样每增加 1 个整数步长,浮点数 t 就增加 0.001
循环上限 = 取整 (#pi × 2 × 2000) ' 增加循环上限,使曲线更平滑 (步长 0.0005)
点索引 = 1 ' 数组索引从1开始
.变量循环首 (0, 循环上限, 1, t_整数)
' 将整数型循环变量转换为浮点数 t
t_浮点 = 到小数 (t_整数) ÷ 2000 ' 对应循环上限的步长
' 计算笛卡尔坐标系的 x, y
x_笛卡尔 = 16 × 求次方 (求正弦 (t_浮点), 3)
y_笛卡尔 = 13 × 求余弦 (t_浮点) - 5 × 求余弦 (2 × t_浮点) - 2 × 求余弦 (3 × t_浮点) - 求余弦 (4 × t_浮点)
' 转换为屏幕坐标系并进行缩放和平移
' 注意:易语言Y轴向下,所以y需要反向
屏幕X = 取整 (中心X + x_笛卡尔 × 缩放比例)
屏幕Y = 取整 (中心Y - y_笛卡尔 × 缩放比例)
' 将点添加到数组
重定义数组 (点数组, 真, 点索引, 2) ' 动态增加数组大小
点数组 [点索引] [1] = 屏幕X
点数组 [点索引] [2] = 屏幕Y
点索引 = 点索引 + 1
.变量循环尾 ()
' 绘制并填充多边形
目标画板.画多边形 (点数组, 取数组成员数 (点数组)) ' 传入点数组和点数目
目标画板.刷新显示 () ' 刷新画板显示
|