如何将现有矢量节点沿倾斜直线对齐
要将现有矢量节点沿倾斜直线对齐,请用两个固定参考点定义直线,然后将其他节点移到这条直线上。要精确定位,请计算节点坐标并逐一输入。要进行交互式编辑,可以将每个节点吸附到临时直线路径上。
本教程适用于需要在保留节点的同时,完善现有矢量角色轮廓或细节的用户。主要流程使用 Inkscape 的坐标栏;另一个方法介绍如何在 Affinity Designer 2 中利用几何吸附。两种方法都无需重建图稿。
对齐节点前,先确定哪些内容必须保持不变
选择两个参考节点 A 和 B,用来定义预期的倾斜方向。它们可以是较大角色轮廓中某一段直线的两端。记录它们的坐标,并在重新定位中间节点时保持不变。
接下来,决定中间节点应如何移动。“沿直线对齐”说明了目标位置,但没有说明移动方向。以下三种方式都很实用:
| 定位规则 | 保持不变的内容 | 适用情况 |
|---|---|---|
| 保持每个节点的 X 坐标 | 现有的水平位置 | 节点位置已符合水平参考位置 |
| 保持每个节点的 Y 坐标 | 现有的垂直位置 | 垂直位置比水平位置更重要 |
| 垂直投影到直线上 | 每个节点的最短移动距离 | 希望消除节点相对预期直线的侧向偏差 |
即使所有最终节点都位于同一直线上,这些规则也可能产生不同结果。等距是另一种操作:仅对齐节点不会使节点间距相等。Inkscape 文档分别介绍了水平或垂直对齐,以及等间距分布。对齐和分布 — Inkscape 初学者指南
选择现有节点,不要移动整个形状
在 Inkscape 中,按 N 或 F2 激活节点工具,然后单击现有路径以显示其节点。单击要重新定位的具体节点。节点工具可编辑路径几何形状,包括节点位置以及控制相邻线段的手柄。使用节点工具编辑路径 — Inkscape 初学者指南
编辑前,先保存一份工作副本,并记录哪些节点属于目标区段。建议记录 A 和 B 的坐标、要移动的每个节点的原始坐标,以及选定的定位规则。这样操作可重复进行,也便于清楚比较结果。
使用下面的坐标流程时,请一次只选一个节点。Inkscape 的节点工具控件中提供 X 和 Y 栏以及坐标单位选择器。每次只选一个节点,可以明确指定要更改的坐标。节点工具选项 — Inkscape 初学者指南
如果任务是调整单一路径内部的节点,请避免使用对象对齐命令。根据当前激活的是节点工具还是选择工具,Inkscape 文档中的对齐流程会有所不同。对齐和分布 — Inkscape 初学者指南
精确计算位置,同时保持水平位置不变
对于经过 A = (Ax, Ay) 和 B = (Bx, By) 的倾斜直线,水平坐标为 x 的点在直线上时满足:
y = Ay + (x − Ax) × (By − Ay) / (Bx − Ax)
如果每个节点的 X 坐标必须保持不变,这个方程就能用于对齐。它是一种几何计算,并非编辑器中的专用命令。
下面是明确标注为示例的坐标,单位均为相同的文档单位:A = (20, 30),B = (100, 70)。它们的水平差为 80,垂直差为 40,因此直线方程为:
y = 30 + (x − 20) × 0.5
假设有三个现有中间节点,坐标如下。保持它们的 X 值不变后,目标坐标如下:
| 节点 | 原始位置 | 目标位置 |
|---|---|---|
| P1 | (40, 50) | (40, 40) |
| P2 | (60, 40) | (60, 50) |
| P3 | (80, 65) | (80, 60) |
在 Inkscape 中输入目标坐标:
- 使用节点工具单独选择 P1。
- 确认坐标单位与计算时使用的单位一致。
- 保持 X 为 40,将 Y 输入为 40。
- 单独选择 P2,保持 X = 60,并输入 Y = 50。
- 单独选择 P3,保持 X = 80,并输入 Y = 60。
- 根据记录的坐标重新检查 A 和 B。
现在这三个节点都位于由未移动的参考点定义的直线上。本例中的水平间距相等,是所选示例坐标的结果;对齐计算本身不会生成等距分布。
如果目标直线是垂直线,Bₓ − Aₓ 将为零,因此这个公式无法保持 X 不变。对于垂直线,将每个目标节点的 X 设为 Aₓ。对于接近垂直的直线,保持 Y 不变可能更实用,因为很小的水平差可能对应很大的垂直移动。
若要保持 Y 不变,请使用 x = Ax + (y − Ay) × (Bx − Ax) / (By − Ay)。该公式要求 By 与 Ay 不同。请从同一组编辑器坐标栏和单位系统中读取所有坐标,不要混用文档坐标和从屏幕截图上测量的数据。
想要最短移动距离时,使用垂直投影
如果 X 和 Y 都不需要保持不变,垂直投影可以找到无限延伸的目标直线上离节点最近的点。当中间节点只是稍微偏离了原本正确的倾斜区段时,这种方法很有用。
对于现有节点 P = (Px, Py),先计算直线方向:
dx = Bx − Ax
dy = By − Ay
然后计算节点沿直线的位置参数以及投影坐标:
t = ((Px − Ax) × dx + (Py − Ay) × dy) / (dx² + dy²)
Qx = Ax + t × dx
Qy = Ay + t × dy
使用相同的示例参考点和原始节点,可得:
| 节点 | 原始位置 | 垂直投影目标位置 |
|---|---|---|
| P1 | (40, 50) | (44, 42) |
| P2 | (60, 40) | (56, 48) |
| P3 | (80, 65) | (82, 61) |
逐个输入每个节点的两个目标坐标。这些数值已通过一个小型确定性 Python 计算进行核对。它们用于说明几何关系,并非从某个特定角色文件中测得。
有两个条件需要注意。第一,A 和 B 必须是不同的点:如果两个参考点重合,分母就会为零,无法定义直线。第二,这种计算是将节点投影到无限延伸的直线上。若 t 值介于 0 和 1 之间,结果位于 A 和 B 之间;若 t 值超出此范围,结果则会落在端点之外。
如果投影后的节点落在目标区段之外,请在移动前检查该节点。自动将它强制移到最近端点会使节点重叠,并改变预期位置。仅靠公式也无法处理节点按连接顺序来回折返的现有路径。
在 Affinity Designer 2 中将节点吸附到倾斜参考路径
对于少量节点,临时参考路径可能比计算坐标更方便。Affinity Designer 2 文档介绍了节点工具中的 吸附到所选曲线的几何形状 选项,可将移动中的节点吸附到所选曲线的路径或节点上。节点吸附控件独立于全局吸附功能。节点工具 — Affinity Designer 2 帮助
以下流程将这一文档说明的功能用于本对齐任务:
- 创建一条独立的直线参考曲线,使其具有所需倾斜角度,并经过两个参考位置。
- 使用节点工具选择图稿曲线和参考曲线。
- 在上下文工具栏中启用 吸附到所选曲线的几何形状。
- 只选择一个图稿节点并将其拖向参考曲线。
- 确认节点吸附到了参考几何形状的预期位置。
- 对其余节点重复此操作,同时保持两个参考节点不动。
- 检查结果后删除临时曲线。
参考线段应足够长,以覆盖所有预期的目标位置。靠近端点时,请检查节点是否落在端点上,而非预期的内部位置。
将节点拖到路径上可以为它指定该路径上的目标位置,但这本身并不指定垂直投影,也不会保持 X 或 Y 不变。如果这些条件很重要,请使用计算出的坐标。Affinity Designer 2 还介绍了通过变换面板重新定位单个节点的方法。编辑曲线和形状 — Affinity Designer 2 帮助
如果轮廓仍然弯曲,请检查贝塞尔手柄
节点对齐并不一定会使可见轮廓变直。贝塞尔手柄控制连接线段的形状,因此即使线段两端的节点都位于目标直线上,线段也可能向外弯曲。使用节点工具编辑路径 — Inkscape 初学者指南
分别检查每个连接线段。如果任务只要求锚点位置对齐,请保留预期的曲率。如果该区段本身必须是直线,也需要妥善处理手柄:使用直线段,或将相关控制点放在目标直线上,避免产生过冲。
在两个参考节点处,更改节点类型前,请考虑相邻的轮廓。Inkscape 的尖角节点允许分别移动手柄,而平滑节点会使两个手柄在节点处保持对齐。对称节点还会使两个手柄到节点的距离相等。这些约束会影响直线区段与相邻曲线的衔接。关于节点类型 — Inkscape 初学者指南
如果直线区段要在拐角处与曲线相接,分别控制手柄可能很有用。如果需要流畅过渡,请保留所需的切线方向。将所有节点都改为同一种类型,可能会不必要地改变角色周围的细节。
移除参考线前检查对齐结果
根据开始时选定的任务检查结果:
- 参考点: A 和 B 仍保持记录的坐标。
- 定位规则: 节点保持了 X、保持了 Y,或位于计算所得的垂直投影目标位置。
- 范围: 每个中间节点都在预期区段内。
- 路径顺序: 相连节点按预期顺序经过该区段。
- 线段形状: 曲率和过渡符合预期轮廓。
- 精度: 坐标取整没有造成可见偏差。
对于上面的示例,每对对齐后的坐标都应满足 y = 0.5x + 20,误差不超过输入所用的精度。这样就能通过数值独立于视觉外观进行检查。还要按角色预期的显示尺寸检查,因为编辑后的区段仍需与周围设计协调。
固定两个参考点,仔细选择移动规则,并在定位节点后检查连接线段。这样就能以可重复的方式对齐现有倾斜区段,同时保留对角色其余轮廓的控制。
