例如,如下所示的路径:
<path d="M 35 50 L 35 35 L 90 90 z" fill="goldenrod"/>
答案 0 :(得分:1)
如果轮廓关闭(z-command)并且它是简单的多边形,则sum of interior angle s
SA = 180 * (n - 2)
其中n是顶点数。
这是3个顶点,所以SA = 180
(它也适用于凹面多边形,但不适用于自交叉多边形(它们不简单&#39;)
答案 1 :(得分:0)
MBo的答案很好,但是如果你想明确计算角度,你可以使用点积。对于两个向量A.B = Ax*Bx+Ay*By
,点积由|A|=sqrt(Ax*Ax+Ay*Ay)
给出。如果A的长度为A . B = |A| |B| cos(angle)
,则向量之间的角度具有acos( A . B / ( |A| |B| )
的关系。所以角度由
<svg id="picture" version="1.1"
xmlns="http://www.w3.org/2000/svg"
width="400" height="300">
<path id="poly" d="M 35 50 L 35 35 L 90 90 z" fill="goldenrod"/>
</svg>
假设你svg代码中的元素有一个明确的id。
poly = document.getElementById("poly"); // get the svg element
// get the parts of the d attribute and split on space.
parts = poly.getAttribute("d").split(/\s+/);
x=[],y=[]; // Arrays to hold x,y coords
j=0;
// loop through parts of svg, extract x,y coords
for(i=0;i<parts.length-1;i+=3) {
x[j]=parts[i+1];
y[j]=parts[i+2];
++j;
}
sum=0; // variable to hold the sum
for(var i=0;i<x.length;++i) { // loop through each vertex
prev = i >0 ? i-1 : x.length-1; // get previous index
next = (i+1) % x.length; // get next index
Ax = x[next] - x[i]; Ay = y[next] - y[i]; // vector A
Bx = x[prev] - x[i]; By = y[prev] - y[i]; // Vector B
dot = Ax * Bx + Ay * By; // dot product
lenA = Math.sqrt(Ax*Ax + Ay*Ay); // Length of A
lenB = Math.sqrt(Bx*Bx + By*By); // Or use Math.hypot
angle = Math.acos( dot / (lenA * lenB)); // find angle using
sum+=angle; // find sum
}
// print the sum (using degrees)
console.log(180 * sum / Math.PI);
您可以使用以下方式找到角度:
cross = Ax * By - Ay * Bx;
if(cross > 0)
sum+=angle;
else
sum += Math.PI*2 - angle;
注意结果是179.99999999999997接近于MBo的结果。
上面的代码中有一个小错误,因为它不适用于凹面多边形。这可以使用2D版本的十字产品来修复,以查找角度是否反射。在循环结束时添加:
bcp.exe "select * from OrderXpress.dbo.Customers where CustId < 1000" queryout "D:\Customer.dat" -S localhost -U sa -P Sa12345 -E -n
IF %ERRORLEVEL% > 0 ( PAUSE )
bcp.exe OrderXpress.dbo.Customers out "D:\Customer2.dat" -S localhost -U sa -P Sa12345 -E -n
IF %ERRORLEVEL% > 0 ( PAUSE )
bcp.exe OrderXpress.dbo.Orders out "D:\Orders.dat" -S localhost -U sa -P Sa12345 -E -n
IF %ERRORLEVEL% > 0 ( PAUSE )