一個線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