javascript - 使用 d3.js 将鼠标 svg 转换为极坐标图坐标

标签 javascript svg d3.js

created使用 d3 的极坐标图类似 to this example .

Polar plot

如何将 svg 坐标转换为极坐标?

var svgPolar = d3.select("#polar")
    .append("svg")
    .on("mousemove", function(){$("#coords").text(d3.mouse(this));})
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

我已经有了 jsfiddle 上鼠标移动的 x 和 y 坐标。 谢谢。

编辑

我根据自己的需要进行了调整。但是区分方位 Angular 看起来有点难看。

.on("mousemove", function(){
    var coords = d3.mouse(this);
    var adjusted_x = coords[0] - ( width / 2 );
    var adjusted_y = coords[1] - ( height / 2 );
    var d = Math.sqrt( ( adjusted_x * adjusted_x ) + ( adjusted_y * adjusted_y ) );
    var degrees_elevation = (( 1 - d/radius ) * 90).toFixed(2)
    var angle_azimuth = Math.atan2( adjusted_y, adjusted_x );
    var degrees_azimuth = ( angle_azimuth + ( Math.PI/2 ) ) * ( 180 / ( Math.PI ) );
    var degrees_azimuth_fixed = (degrees_azimuth > 0 ? degrees_azimuth : (degrees_azimuth+360)).toFixed(2);
    if(degrees_elevation >= 0)
        $("#coords").text(degrees_azimuth_fixed + " " + degrees_elevation);
})

http://jsfiddle.net/crbmba60/2/

最佳答案

一旦您将笛卡尔坐标转换为引用绘图区域的中心而不是左上角,这实际上相当简单。

var coords = d3.mouse(this);    
var adjusted_x = coords[0] - ( width / 2 );
var adjusted_y = coords[1] - ( height / 2 );

一旦你知道了,你就可以使用毕达哥拉斯定理得到距中心的距离

var d = Math.sqrt( ( adjusted_x * adjusted_x ) + ( adjusted_y * adjusted_y ) );

以及使用atan2的 Angular

var angle = Math.atan2( adjusted_y, adjusted_x );

另一个复杂点是 atan2 将为您提供一个 Angular ,其中 0 度(或 2 pi 弧度)对应于东方向。要将以弧度为单位的 Angular 转换为与基本方向相对应的度数,您需要将 Math.PI/2 添加到 atan2 给出的 Angular 中。例如,

var angle_in_degrees = ( Math.atan2( adjusted_y, adjusted_x ) + ( Math.PI / 2 ) ) * ( 360 / ( Math.PI * 2 ) );

这些应该是您根据鼠标坐标执行任何定位数学所需的基本要素。

关于javascript - 使用 d3.js 将鼠标 svg 转换为极坐标图坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786371/

相关文章:

html - SVG 堆栈在 Chrome 中不起作用(webkit)

html - 我想为这个标志制作动画,但由于某种原因它不起作用

javascript - [求助]: d3. js Scatterplot遍历3个不同的数组

javascript - x 轴更改时 d3 圆没有响应

javascript - JS全页滑动导航按键

javascript - 如何排除 webpack 中 *.min.js 的丑化

javascript - 获取点击元素的 ID 并将其包含在纯 JS 的函数中?

带有 svg 的 css 剪辑路径在 Chrome 中不起作用

javascript - 对于 D3 堆叠条,我如何知道鼠标位于哪个条中?

javascript - Vue.js 2 : Conditional Rendering not working