python-2.7 - 元素的 QPainterPath 百分比/t 值
问题描述
我有一个 QPainterPath,它有两个元素,它们都是三次贝塞尔曲线,如下所示:
如果我想沿着路径找到一个特定的点,我可以使用该pointAtPercent
方法。该文件指出
当曲线出现时,百分比参数被映射到贝塞尔方程的 t 参数。
当我得到百分比时,它沿着整个路径的长度从 0 到 1。例如,中间控制点位于 t = 0.46,而实际上它是左侧元素的结束 (t = 1.0) 和下一个元素的开始 (t = 0)。所以在我的图像中,如果我得到绿色圆圈处的百分比,它将在 0.75 左右。我想要的是为绿色圆圈获得类似 0.5 的值,即第二个贝塞尔曲线的百分比。
所以我的问题是,Qt 中有没有办法确定给定元素的百分比值,而不是相对于整个路径长度?在我的示例中,我碰巧知道中间控制点的百分比值,但一般我不会知道,所以我不能只缩放百分比或假设分布均匀。
如果这很重要,我正在使用 PyQt4 (Qt 4.8)。谢谢!
解决方案
t
沿 total 缩放length()
,但您也可以知道各个段的长度,从而t
进行相应的调整。路径的元素是一个相当具体的术语:每个 3 个元素cubicTo
,假设没有中间位置变化。像您这样的任意路径由 a MoveToElement
, CurveToElement
, two CurveToDataElement
s, another CurveToElement
, another two CurveToDataElement
s 组成。您必须迭代元素并提取第一个立方的长度,以调整t
.
提取第一个立方,确定其长度,然后使用它进行计算的函数t2
看起来t
类似于(未经测试):
def t2(path, t):
if path.elementCount() != 7:
raise ValueError('invalid path element count')
path1 = QPainterPath()
path1.moveTo(path.elementAt(0))
path1.cubicTo(path.elementAt(2), path.elementAt(3), path.elementAt(1))
l = path.length()
l1 = path1.length()
l2 = l - l1
t2 = (t*l - l1)/l2
return t2
推荐阅读
- python - 从 conv2d 模型预测图像也必须是 4d
- python - 如何从具有请求和 BeautifulSoup4 的动态内容的网站中提取表格数据?
- authentication - winston-elasticsearch:如何将弹性搜索与凭据连接起来?
- c - 是否可以为联合创建数据类型获取器(用 C 语言)?
- python - sockeye 安装版本 2.2.7
- grid - oracle apex 交互式网格中的验证
- javascript - 如何解决:TypeError: __init__() got an unexpected keyword argument 'max_Length' 我什么都试过了
- r - 如何在 R Shiny 中使用变量名访问辅助输入?
- python - 使用 pandas 框架计算空值的数量
- python - 是否可以遍历 dir() 的项目的 *values*?