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

Qt中如何在已知点间绘制圆弧以绘制XNOR门符号

XNOR门绘制参考示意图

问题说明

需要在E点到G点、F点到H点之间绘制圆弧,实现标准XNOR门(同或门)符号,初始实现代码如下,运行效果不符合预期:

path.moveTo(72,10); // for E --> G
QRect bound1 (52,10,20,60);
path.arcTo(bound1,90,-180);

QPainterPath path1;  // for F --> H 
path1.moveTo(104,10);
QRect bound2 (72,10,32,60);
path1.arcTo(bound2,90,-180);

实际错误绘制效果:
当前错误绘制效果

错误原因
  • 圆弧外接矩形参数计算错误:Qt绘制圆弧的外接矩形参数需要和圆弧半径严格匹配,初始代码里bound1宽度仅20、bound2宽度仅32,和60的门高对应的圆弧半径不匹配,导致圆弧形状、位置偏移。
  • 路径拆分错误:单独新建path1绘制第二段圆弧时,arcTo会自动在路径当前点和圆弧起点间连直线,出现多余的错误线段,且两段圆弧的绘制方向参数设置错误。
正确实现代码
QPainterPath xnorPath;
// 绘制E到G的左侧半圆弧
xnorPath.moveTo(72, 10); // 定位到E点
// 半圆弧半径30,外接矩形宽高均为60,圆心对齐门体垂直中线
QRect egArcBound(42, 10, 60, 60);
// 从90度(12点钟方向,即E点位置)顺时针绘制180度半圆弧到G点
xnorPath.arcTo(egArcBound, 90, -180);

// 连接直线到F点
xnorPath.lineTo(104, 10);
// 绘制F到H的右侧半圆弧,半径32
QRect fhArcBound(72, 10, 64, 60);
// 从90度位置逆时针绘制180度半圆弧到H点
xnorPath.arcTo(fhArcBound, 90, 180);

// 闭合路径完成门主体轮廓,后续补充输入引脚、输出引脚和左侧额外的同或标识弧即可
xnorPath.closeSubpath();

注意:QtarcTo接口的角度规则为0度指向3点钟方向,正角度为逆时针旋转,负角度为顺时针旋转,绘制前需要根据圆弧凸向确认角度参数符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:54:25