尝试旋转和变换SVG路径-我需要三角计算
Trying to rotate and transform SVG path - do I need trigonometry calculations?
我试图用鼠标操纵SVG路径,它代表电子电阻的符号。这个符号需要操作结束的"引线"(如果你能想象真正的电阻);因此,我试图实现拖动第一个点(第二个仍然在那里),并在拖动新坐标上的第一个点时,对路径的所有点表现成比例。
尝试分组,尝试用三角函数…代码是这样的:
`<g id="r" > <!-- R - group for symbol of electronics resistor -->
<path d="M 200 20 v80 h30 v150 h-60 v-150 h30 m 0 150 v80 "
fill="none" stroke="blue" stroke-width="5" />
<circle cx="200" cy="20" r="10"
fill="blue" />
<circle cx="200" cy="330" r="10"
fill="blue"/>
</g>`
请帮助。
我想我已经大致做了你想要的:http://dl.dropbox.com/u/169269/resistor.svg
单击并拖动电阻以缩放并将其旋转到鼠标位置。在这个版本中,线条粗细和圆圈也会缩放,但要避免这一点应该不难。
它确实需要三角学和变换。关键部分是拖动函数,我将在http://www.petercollingridge.co.uk/interactive-svg-components/draggable-svg-element
对此进行更详细的解释。function drag(evt)
{
if(selected_element != 0)
{
var resistor_x = 200;
var resistor_y = 100;
var mouse_x = evt.pageX;
var mouse_y = evt.pageY;
dx = resistor_x - mouse_x;
dy = resistor_y - mouse_y;
d = Math.sqrt(dx*dx + dy*dy); // Find distance to mouse
theta = 90+Math.atan2(dy, dx)*180/Math.PI; //Find angle to mouse in degrees
transform = "translate(200, 100) rotate(" + theta + ") scale(" + d/310 + ")" ;
selected_element.setAttributeNS(null, "transform", transform);
}
}
注意,这段代码假设电阻器是310像素长,并且绕(200,100)旋转。缩放和旋转转换以(0,0)为中心,因此您应该在(0,0)处绘制具有静态点的电阻,然后将其转换到您想要的位置。
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 在Angular中重新使用HTML端的计算文本
- 尝试旋转和变换SVG路径-我需要三角计算