You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi调用Polygon()绘制三角形仅输出直线的问题排查

问题根因

代码读取三角形顶点坐标时,B、C两点的Y值错误读取了对应X坐标输入框的内容,导致三个顶点坐标满足共线方程,Polygon() 绘制时自然只能生成一条直线。
错误代码段:

Bx := StrToInt(MainForm.EditBx.Text);
By := StrToInt(MainForm.EditBx.Text); // 错误:读取了B点X输入框的值,未读取B点Y输入框

Cx := StrToInt(MainForm.EditCx.Text);
Cy := StrToInt(MainForm.EditCx.Text); // 错误:读取了C点X输入框的值,未读取C点Y输入框

当你将A点设为笛卡尔坐标系原点(0,0)时,三个顶点会全部落在直线 y = x + (y0 - x0) 上,完全退化为共线点,无法构成三角形。

修复方法

将B、C点Y值的读取逻辑改为对应Y坐标输入框即可,修正后的顶点取值代码:

Ax := StrToInt(MainForm.EditAx.Text);
Ay := StrToInt(MainForm.EditAy.Text);

Bx := StrToInt(MainForm.EditBx.Text);
By := StrToInt(MainForm.EditBy.Text); // 改为读取B点Y坐标输入框

Cx := StrToInt(MainForm.EditCx.Text);
Cy := StrToInt(MainForm.EditCy.Text); // 改为读取C点Y坐标输入框
其他注意点
  • 你当前X轴坐标转换写为 -Ax+x0,会导致X轴方向左右翻转。如果需要和标准笛卡尔坐标系一致(X轴向右为正),去掉负号改为 Ax+x0 即可。
  • Y轴转换写为 -Ay+y0 是正确的,刚好抵消VCL画布Y轴向下为正的默认逻辑,实现Y轴向上为正的笛卡尔坐标系效果,这部分无需修改。
  • Polygon() 方法本身完全支持三角形、多边形绘制,后续迭代生成谢尔宾斯基三角形的子三角形时,保持坐标转换逻辑一致即可正常绘制,无需更换绘图函数。

内容的提问来源于stack exchange,提问作者rawhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:30:47