You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
992 B
35 lines
992 B
import { normalizeRadian } from './util.js'; |
|
var PI2 = Math.PI * 2; |
|
export function containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) { |
|
if (lineWidth === 0) { |
|
return false; |
|
} |
|
var _l = lineWidth; |
|
x -= cx; |
|
y -= cy; |
|
var d = Math.sqrt(x * x + y * y); |
|
if ((d - _l > r) || (d + _l < r)) { |
|
return false; |
|
} |
|
if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) { |
|
return true; |
|
} |
|
if (anticlockwise) { |
|
var tmp = startAngle; |
|
startAngle = normalizeRadian(endAngle); |
|
endAngle = normalizeRadian(tmp); |
|
} |
|
else { |
|
startAngle = normalizeRadian(startAngle); |
|
endAngle = normalizeRadian(endAngle); |
|
} |
|
if (startAngle > endAngle) { |
|
endAngle += PI2; |
|
} |
|
var angle = Math.atan2(y, x); |
|
if (angle < 0) { |
|
angle += PI2; |
|
} |
|
return (angle >= startAngle && angle <= endAngle) |
|
|| (angle + PI2 >= startAngle && angle + PI2 <= endAngle); |
|
}
|
|
|