svg - SVG将线转换为矩形
问题描述
我如何通过专门保留有关线的起点和终点的信息将线转换为矩形。例如,通过旋转或倾斜矩形,我将得到一个与线具有相同长度和相同方向的矩形。
解决方案
lineToPath使用线条的起点和终点以及笔划宽度将 SVG 转换<line>
为闭合:<path>
const lineToPath = ({x1,y1,x2,y2,width}) => {
const angle = Math.atan((y2 - y1) / (x2 - x1));
const dx = width / 2 * -Math.sin(angle);
const dy = width / 2 * Math.cos(angle);
return `M ${x1 + dx},${y1 + dy} L ${x2 + dx},${y2 + dy}
L ${x2 - dx},${y2 - dy} L ${x1 - dx},${y1 - dy} Z`;
}
const line = d3.select('line');
const x1 = parseFloat(line.attr('x1'));
const x2 = parseFloat(line.attr('x2'));
const y1 = parseFloat(line.attr('y1'));
const y2 = parseFloat(line.attr('y2'));
const width = parseFloat(line.attr('stroke-width'));
const linePath = lineToPath({x1,y1,x2,y2,width});
d3.select('path').attr('d', linePath);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg>
<line x1="10" y1="90" x2="220" y2="30" stroke="yellow" stroke-width="30" />
<path stroke="red" fill="none" />
</svg>
推荐阅读
- augmented-reality - 本地存储图像文件时,图像加载为黑色矩形
- php - PWA: Uncaught (in promise) TypeError: Request failed and no download with file php
- visual-studio - 使用 Visual Studio CMake 项目同时调试更多项目
- performance - 机器代码的精确副本运行速度比原始函数慢 50%
- swift - 此服务器的证书无效(错误:9813)
- node.js - 有没有办法在 typeORM 中自动创建数据库?
- sharepoint-online - Sharepoint 搜索 api 按术语库/集查询文档?
- javascript - Javascript表单验证提交函数只被调用一次
- javascript - HTTP 400 仅在生产中具有空响应
- excel - 添加后如何显示新工作表?