d3.js - D3强制布局:旋转文字
问题描述
我正在使用一个示例,该示例用于在 d3 的力布局中旋转标签。我正在尝试显示标签文本“ < ”,以便始终显示 A<B。请参考小提琴:http: //jsfiddle.net/xr3917ac/4/
但是,当节点A被圆周运动拖动时,标签文本' < '突然翻转180度显示B < A。如何避免这种翻转,使A始终显示为< B?标签的旋转角度在tick()中计算:
const dsty = d.source.y - d.target.y;
let angle = Math.atan(dsty / (d.source.x - d.target.x)) * 180 / Math.PI;
return 'translate(' + [((d.source.x + d.target.x) / 2), ((d.source.y + d.target.y) / 2)] + ')rotate(' + angle + ')';
解决方案
使用Math.atan2
代替Math.atan
labelLine.attr("transform", function(d) {
if (d) {
const dsty = d.source.y - d.target.y;
let angle = Math.atan2(dsty, (d.source.x - d.target.x)) * 180 / Math.PI;
return 'translate(' + [((d.source.x + d.target.x) / 2), ((d.source.y + d.target.y) / 2)] + ')rotate(' + angle + ')';
}
});
推荐阅读
- ruby-on-rails - Rails .where for array 没有按预期工作
- python - 提取唯一域比较两个文本文件?Python
- java - 在标签中添加 if-else 语句
- android - 在颤动中解析较低的android版本上的日期错误
- django - React/Django 应用程序在本地工作但不在生产环境中
- java - I am making a turn based combat thing in Java just to see if I can figure it out myself, But I have a problem
- html - 删除 Bootstrap 4 DataTable 滚动条导致更窄的表
- nginx - 如何修复错误 400 Hook 应包含在 Nginx 服务器后面运行的 Jenkins 的有效负载
- c++ - 未定义符号:_ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE
- python - Python Matplotlib - 辅助轴多个图例