一个线I需要绘制线在SVG在给定的宽度,例如20像素。图出偏移到SVG
我想才达到什么是绘制另一条线,什么线宽度为原有线路的一半,重叠原线,但不是在市中心,但左对齐/底部。
所以,如果我的x1
和x2
为原线为30,则新行x1
和x2
是25,因为左右宽度为5
Here is a jsFiddle我想才达到的。
UPDATE在jsfiddle上线路正常,因为x1 == x2
,但是当线路不是水平或垂直时,我遇到问题。
我使用下面的代码来计算出新线x
和y
坐标,但总是有一点差距。
棘手的部分是当我想要旋转该行。
我不明白,哪里是错误的,也许某个地方与角度的功能呢?
或者是好的,只是SVG/HTML是不够严谨?
<?php
//Init coordinates and thick
$x1 = 30; $y1 = 20;
$x2 = 230; $y2 = 270;
$lineThick = 20;
//get the new data
$newData = getNewPositions($x1, $y1, $x2, $y2, $lineThick);
function getNewPositions($x1, $y1, $x2, $y2, $thick) {
$offset = $thick/4;
$new['x1'] = $x1;
$new['y1'] = $y1;
$new['x2'] = $x2;
$new['y2'] = $y2;
if ($y1 == $y2) {
$new['y1'] = $y1 - $offset;
$new['y2'] = $y2 - $offset;
return $new;
}
if ($x1 == $x2) {
$new['x1'] = $x1 - $offset;
$new['x2'] = $x2 - $offset;
return $new;
}
$a = abs($y2 - $y1);
$b = abs($x2 - $x1);
$c = sqrt(pow($a,2) + pow($b,2));
$modX = sin($a/$c);
$modY = sin($b/$c);
$new['x1'] = $x1 - ($offset * $modX);
$new['x2'] = $x2 - ($offset * $modX);
$new['y1'] = $y1 + ($offset * $modY);
$new['y2'] = $y2 + ($offset * $modY);
return $new;
}
echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . "\n";
?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="300" height="300" viewBox="0 0 300 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink">
<g>
<line x1="<?php echo $x1; ?>" y1="<?php echo $y1; ?>" x2="<?php echo $x2; ?>" y2="<?php echo $y2; ?>" style="stroke-width:<?php echo $lineThick; ?>; stroke: #000;" />
<line x1="<?php echo $newData['x1']; ?>" y1="<?php echo $newData['y1']; ?>" x2="<?php echo $newData['x2']; ?>" y2="<?php echo $newData['y2']; ?>" style="stroke-width:<?php echo $lineThick/2; ?>; stroke: #0f0;" />
</g>
</svg>
似乎是好的形式,我站在哪里。我在本地复制了你的js和你的php,看起来像[this](http://i.imgur.com/8uTevGI.png) - 左边是js,右边是php。对于PHP我已经使用了以下内容:'$ x1 = 200; $ y1 = 20; $ x2 = 200; $ y2 = 270;' – Andrew
是的,那好,如果你看到,当x1 = x2或y1 = y2。但试试我的'$ x1 = 30; $ y1 = 20; $ x2 = 230; $ y2 = 270;' – vaso123
你是指时髦的[蓝线](http://i.imgur.com/gn0VU19.png)? – Andrew