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
相关产品推荐
相关产品推荐

