| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- function getColorArray() {
- var array = new Array(
- [new RColor(255, 0, 0), new RColor(255, 0, 0), new RColor(160, 32, 240), new RColor(0, 255, 0),],
- [new RColor(128, 0, 128), new RColor(77, 255, 77), new RColor(200, 96, 255), new RColor(160, 32, 240),],
- [new RColor(255, 153, 77), new RColor(255, 153, 77), new RColor(128, 255, 255), new RColor(0, 255, 255),],
- [new RColor(77, 255, 255), new RColor(77, 255, 255), new RColor(255, 255, 128), new RColor(255, 255, 0),],
- [new RColor(148, 121, 253), new RColor(148, 121, 253), new RColor(255, 192, 128), new RColor(255, 165, 0),]
- );
- return array;
- }
- /** 随机获取预设颜色中的一种 */
- function randomColorSingle() {
- var array = randomColor();
- return array[Math.floor(Math.random() * array.length)];
- }
- /** 随机获取预设颜色的一组颜色 */
- function randomColorArray() {
- var array = getColorArray();
- return array[Math.floor(Math.random() * array.length)];
- }
- /** 已知圆上两点的坐标及半径,求圆心的坐标 */
- function getRoundCenter(x1, y1, x2, y2, r, reversed) {
- // 两点的中点
- var midX = (x1 + x2) / 2;
- var midY = (y1 + y2) / 2;
- // 两点间的距离 d
- var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
- // 圆心坐标 (h, k)
- var cx = midX + (reversed > 0 ? 1 : -1) * Math.sqrt(Math.pow(r, 2) - Math.pow(d / 2, 2)) * (y1 - y2) / d;
- var cy = midY + (reversed > 0 ? 1 : -1) * Math.sqrt(Math.pow(r, 2) - Math.pow(d / 2, 2)) * (x2 - x1) / d;
- return [cx, cy];
- }
- /** 已知圆心和圆上一点的坐标,求圆上一点和圆心之间的角度 */
- function calculateAngle(cx, cy, px, py) {
- var dx = px - cx;
- var dy = py - cy;
- var theta = Math.atan2(dy, dx);
- var degrees = (theta * 180) / Math.PI;
- return (degrees + 360) % 360;
- }
- /** 已知圆的半径和角度,就弧长 */
- function calculateArcLength(radius, angle) {
- // 将角度转换为弧度
- // var angleInRadians = (angle * Math.PI) / 180;
- // 计算弧长
- return radius * deg2rad(angle);
- }
- /** 已知A,B,C,D 四个坐标,就AB和CD相交的交点坐标 */
- function lineCrossoverPoint(A, B, C, D) {
- var Ax = A[0];
- var Ay = A[1];
- var Bx = B[0];
- var By = B[1];
- var Cx = C[0];
- var Cy = C[1];
- var Dx = D[0];
- var Dy = D[1];
- var m1 = (By - Ay) / (Bx - Ax);
- var m2 = (Dy - Cy) / (Dx - Cx);
- var b1 = Ay - m1 * Ax;
- var b2 = Cy - m2 * Cx;
- var intersectionX = (b2 - b1) / (m1 - m2);
- var intersectionY = m1 * intersectionX + b1;
- return [intersectionX, intersectionY];
- }
- /** 已知A、B两点,求AB连接与x轴的夹角度数 */
- function getLineAngle(origin, target) {
- var x1 = origin[0];
- var y1 = origin[1];
- var x2 = target[0];
- var y2 = target[1];
- var theta = Math.atan((y2 - y1) / (x2 - x1));
- var angle = rad2deg(theta);
- // 将角度调整到 0 到 180 度范围内
- angle += 180;
- return angle % 180;
- }
- /** 已知AB两点,得到{ "drift": A->B的偏移量, "angle": A->B的偏移角度, "vertical": A->B的垂直方向偏移量, "vertical_angle": A->B的垂直方向偏角度 } */
- function computeOffset(origin, target) {
- var x1 = origin[0];
- var y1 = origin[1];
- var x2 = target[0];
- var y2 = target[1];
- // 0°至180°
- var angle = getLineAngle(origin, target);
- var drift_x = (x1 - x2 > 0 ? -1 : 1) * Math.abs(Math.cos(deg2rad(angle)));
- var drift_y = (y1 - y2 > 0 ? -1 : 1) * Math.abs(Math.sin(deg2rad(angle)));
- // -90° 至 90°
- var vAngle = angle - 90;
- var vertical_x = Math.abs(Math.cos(deg2rad(vAngle)));
- var vertical_y = (vAngle > 0 ? 1 : -1) * Math.abs(Math.sin(deg2rad(vAngle)));
- return { "drift": [drift_x, drift_y], "angle": angle, "vertical": [vertical_x, vertical_y], "vertical_angle": vAngle }
- }
- /** 通过文件路径file,获取文件名称 */
- function getFileName(file) {
- if (!file) {
- return "";
- }
- var match = file.toString().match(/\/([^\/]+)$/);
- return match ? match[1] : null;
- }
- /** 生成图层的名称 统一格式 */
- function getLayername(prefix, filePath) {
- return (prefix || "Other") + "-" + Math.floor(Math.random() * 100) + "-" + getFileName(filePath);
- }
- /** 格式化输出当前时间 */
- function formatDateTime() {
- var now = new Date();
- var year = now.getFullYear();
- var month = String(now.getMonth() + 1).padStart(2, '0');
- var day = String(now.getDate()).padStart(2, '0');
- var hours = String(now.getHours()).padStart(2, '0');
- var minutes = String(now.getMinutes()).padStart(2, '0');
- var seconds = String(now.getSeconds()).padStart(2, '0');
- return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
- }
|