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

C#使用GraphicsPath绘制IEEE标准OR逻辑门出错该如何解决?

C# 绘制IEEE标准OR门的问题修正

现有代码的核心问题

  • 大量使用硬编码的固定像素值(如1、16、-4、固定角度参数),没有和控件高度iHeight做比例绑定,无法适配不同控件尺寸,也不符合IEEE标准的等比要求
  • 左侧内凹弧的拼接逻辑错误:你当前用两个参数不匹配的圆弧拼接,角度和外接矩形没有对齐,导致拼接处出现突兀拐点,无法形成平滑的内凹轮廓
  • 圆弧的圆心、半径参数不符合IEEE标准比例:标准OR门宽高比约为1:1,右侧外凸弧半径等于门体高度的1/2,左侧内凹弧的圆心位于门体左侧外部,半径等于门体整体高度

修正后的实现代码

你可以参考以下适配比例的实现,所有参数均和iHeight绑定,严格匹配IEEE标准比例:

Pen pen = new Pen(Color.Black, 2);
GraphicsPath pathOR = new GraphicsPath();
float width = iHeight; // 宽高比1:1符合IEEE标准
float radiusRight = iHeight / 2; // 右侧圆弧半径为高度的1/2
float radiusLeft = iHeight; // 左侧凹弧半径等于整体高度

// 上半部分左侧弧
pathOR.AddArc(-radiusLeft, 0, radiusLeft * 2, radiusLeft * 2, 270, 30);
// 上边缘直线
pathOR.AddLine(radiusLeft * (float)Math.Sin(Math.PI / 6), 0, width - radiusRight, 0);
// 右侧凸弧
pathOR.AddArc(width - radiusRight * 2, 0, radiusRight * 2, radiusRight * 2, 270, 180);
// 下边缘直线
pathOR.AddLine(width - radiusRight, iHeight, radiusLeft * (float)Math.Sin(Math.PI / 6), iHeight);
// 下半部分左侧弧
pathOR.AddArc(-radiusLeft, -iHeight, radiusLeft * 2, radiusLeft * 2, 60, 30);

pathOR.CloseAllFigures();
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // 开启抗锯齿避免边缘锯齿
e.Graphics.DrawPath(pen, pathOR);

额外优化建议

  • 所有坐标、角度参数都用比例计算,不要写死固定像素值,避免控件缩放时图案变形
  • 可以把宽高比、圆弧角度作为可配置参数,方便后续适配其他逻辑门的绘制需求

内容的提问来源于stack exchange,提问作者Marcelo C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:04