gpt4 book ai didi

pdf - PDF 线宽如何在水平和垂直维度上与 CTM 交互?

转载 作者:行者123 更新时间:2023-12-04 20:06:24 25 4
gpt4 key购买 nike

考虑到当前的转换矩阵 (CTM),我试图弄清楚线宽如何影响 PDF 中的描边线。两个问题...

第一:如何使用 CTM 将线宽转换为设备空间? PDF 1.7 Reference第208页,描述了如何使用 CTM 转换点,假设输入数据是一个 (x, y) 点。线宽只是一个值,那么我该如何转换呢?我是否像 (lineWidth, lineWidth) 那样从它创建一个“虚拟”点?

第二:一旦我做了那个计算,我就会得到另一个 (x, y) 点。如果 CTM 具有不同的水平和垂直缩放因子,那会给我两种不同的线宽。这些线宽实际上是如何应用的?只有在绘制水平线时才应用第一个 (x) 吗?

第二个问题的具体示例:如果我绘制/描边从 (0, 0) 到 (4, 4) 的水平线,线宽为 (2, 1),则结果矩形的边界框的坐标是多少(即,包含线宽的矩形)?

这是引用中的第 215 页,但它实际上并没有解释描边线的粗细如何变化:

The effect produced in device space depends on the current transformation matrix (CTM) in effect at the time the path is stroked. If the CTM specifies scaling by different factors in the horizontal and vertical dimensions, the thickness of stroked lines in device space will vary according to their orientation.

最佳答案

how do I convert the line width to device space using the CTM?



线宽本质上是与其方向垂直的线尺寸。因此,要使用 CTM 计算变换后的宽度,您选择一个垂直于原始线的平面向量,其长度是当前图形状态的线宽,应用 CTM(无平移,即设置 e 和 f 为 0)到该向量(通过将第三个坐标设置为 1 嵌入到三维空间中)并计算所得二维向量的长度(投影到前两个坐标上)。

例如。您在当前用户空间坐标中有一条从 (0,0) 到 (1,4) 的线,宽度为 1。您必须找到一个与其垂直的向量,例如(-4,1) 通过逆时针旋转 90°,并将其缩放到 1 的长度,即 ( -4/sqrt(17), 1/sqrt(17) ) 在这种情况下。

如果 CTM 是来自@Tikitu 的答案

CTM has a horizontal scaling factor of 2 and a vertical scaling factor of 1



这将是
2 0 0
0 1 0
0 0 1

该矩阵将使上面示例中的行从 (0,0) 变为 (2,4) 并且“宽度向量”( -4/sqrt(17), 1/sqrt(17) )将转换为 ( -8/sqrt(17), 1/sqrt(17) )(CTM 已经没有翻译部分),长度为 sqrt(65/17),约为 1.955。 IE。结果线的宽度(其大小垂直于其方向)接近 2。

如果原始行改为 (0,0) 到 (4,1) 且宽度为 1,则宽度向量选择将是 ( -1/sqrt(17), 4/sqrt(17) )。在这种情况下,转换后的线将从 (0,0) 到 (8,1),宽度向量将转换为 ( -2/sqrt(17), 4/sqrt(17) ),长度为 sqrt( 20/17) 约为 1.085。 IE。结果线的宽度(垂直于其方向)略大于 1。

您似乎对线条的“角落”感兴趣。为此,您必须获取转换线的起点和终点,并添加或减去转换后的宽度向量的一半。在上面的示例中:
  • (从 (0,0) 到 (1,4) 的原始行): ( -4/sqrt(17), 1/(2*sqrt(17)) ), ( 4/sqrt(17), -1/( 2*sqrt(17)) ), ( 2-4/sqrt(17), 4+1/(2*sqrt(17)) ), ( 2+4/sqrt(17), 4-1/(2*)平方(17)));
  • (从 (0,0) 到 (4,1) 的原始行): ( -1/sqrt(17), 2/sqrt(17) ), ( 1/sqrt(17), -2/sqrt(17) ) , ( 8-1/sqrt(17), 1+2/sqrt(17) ), ( 8+1/sqrt(17), 1-2/sqrt(17) )。

  • 不过不要忘记,PDF 行通常不会在最后被切断,而是有一些上限。还要记住线宽 0 的特殊含义。

    关于pdf - PDF 线宽如何在水平和垂直维度上与 CTM 交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690496/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com