npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mathjs-geo

v1.0.2

Published

A library of coordinate system math calculation. 坐标系数学计算方法库。

Downloads

8

Readme

mathjs-geo

A library of coordinate system math calculation.

坐标系数学计算方法库。

Usage 使用

下载release的文件或者npm install --save mathjs-geo,支持以下任一方式加入前端项目中:

1、作为JS文件通过<script>引入html中:

<script src="./dist/mathjs-geo.min.js"></script>

2、支持ES6+的import引入:

import mathgeo from 'mathjs-geo';

3、支持CommonJS语法引入:

const mathgeo = require('mathjs-geo');

##API Doc 方法文档

Math 数学方法

As we know, float number arithmetic is inaccurate. mathgeo provides four more accurate functions(add, subtract, multiply, and divide).

正如我们所知,浮点数运算是不精确的,mathgeo提供了加减乘除的4个方法,能让浮点数运算也能得到较为精确的结果。

  • add 加法

    mathgeo.add(1.24, 567.0932); // 568.3332
    mathgeo.add(0.312, 690.4, 78, 33.34); // 802.052
  • sub 减法

    mathgeo.sub(1.24, 1); // 0.24
    mathgeo.sub(87.4, 1.028, 99.09); // -12.718
  • multi 乘法

    mathgeo.multi(3.4, 61.812, 2); // 420.3216
  • div 除法

    mathgeo.div(5, 2, 3, 4.2); // 0.19841269841269843

In addition, round method can help you round the float number.

另外,还有四舍五入的方法,保留n位小数。

  • round 四舍五入

    mathgeo.round(23.1119, 0); // 23
    mathgeo.round(23.1119, 1); // 23.1
    mathgeo.round(23.1119, 2); // 23.11
    mathgeo.round(23.1119, 3); // 23.112

Geography 地理方法

At present, only 2d methods are supported, and 3d methods will be added in the future.

目前只支持2d的方法,未来将补充3d的方法。

2D

The following methods are based on a two-dimensional coordinate system, where each point in space has coordinates (x, y) representing its position.

以下方法基于二维坐标系,即空间内每个点都有坐标(x, y)表示其位置。

  • getKB([[x1, y1], [x2, y2]])

    Calculate the k and b of the equation y=k*x+b. points [x1, y1] and [x2, y2] are on the line y=k*x+b.

    求斜截式y=k*x+b的k与b。点[x1, y1]和点[x2, y2]在直线 y=k*x+b 上。

    mathgeo.getKB([[0.5, 1.5], [2.5, 1]]); // {k: -0.25, b: 1.625}
    mathgeo.getKB([[0.5, 1.5], [2.5, 1.5]]); // {k: 0, b: 1.5}
    mathgeo.getKB([[0.5, 1.5], [0.5, 3]]); // null(直线与y轴平行,返回null)
  • getVertical([x, y], [[x1, y1], [x2, y2]], l)

    Find the coordinates of both ends of the line segment whose length is l and is perpendicular to the straight line [[x1, y1], [x2, y2]]. The required line segment is divided equally by point [x,y].

    求过点[x,y]并与直线垂直的长度为l的线段两端点坐标(所求线段被点[x,y]平分)。

    mathgeo.getVertical([4, 2.125], [[6.5, 1.5], [0.5, 3]], 10); // [[2.787,-2.727],[5.213,6.977]]
  • getParallel([x, y], [[x1, y1], [x2, y2]], l)

    Find the coordinates of both ends of the line segment whose length is l and is parallel to the straight line [[x1, y1], [x2, y2]]. The required line segment passes through the point [x,y] and is divided equally by point [x,y].

    求过点[x,y]作与直线平行的长度为l的线段两端点坐标(所求线段被点[x,y]平分)。

    mathgeo.getParallel([1, 1], [[6.5, 1.5], [0.5, 3]], 10); // [[-3.851,2.213],[5.851,-0.213]]
  • getExtension([x, y], [[x1, y1], [x2, y2]], l)

    Find the coordinates of the points where the distance between [x, y] and the point is l ([x, y] and the required points are all on the line [[x1, y1], [x2, y2]]).

    求直线[[x1, y1], [x2, y2]]上与点[x,y]的距离为l的点的坐标(点[x,y]也在直线上)。

    mathgeo.getExtension([4, 2.125], [[6.5, 1.5], [0.5, 3]], 10); // [[-5.701,4.55],[13.701,-0.3]]
  • getAngle([[x1, y1], [x2, y2]])

    Get the angle of the line [[x1, y1], [x2, y2]].

    求直线[[x1, y1], [x2, y2]]的角度(从X轴正向逆时针旋转的角度)。

    mathgeo.getAngle([[1, 1], [2, 2]]); // -135
  • getYFromX(x, [[x1, y1], [x2, y2]])

    Knowing the coordinates of the two points on the line and the x coordinate of third point, find the y coordinate of the third point.

    已知直线上两点和第三点的x坐标,求出第三点的y坐标。

  • getXFromY(y, [[x1, y1], [x2, y2]])

    Knowing the coordinates of the two points on the line and the y coordinate of third point, find the x coordinate of the third point.

    已知直线上两点和第三点的y坐标,求出第三点的x坐标。

    mathgeo.getYFromX(4, [[6.5, 1.5], [0.5, 3]]); // 2.125
    mathgeo.getXFromY(2.125, [[6.5, 1.5], [0.5, 3]]); // 4
  • lineCross([[x1, y1], [x2, y2]], [[x3, y3], [x4, y4]])

    Determine whether the two line segments intersect (line1: [[x1, y1], [x2, y2]], line2: [[x3, y3], [x4, y4]]). If they intersect, return the coordinates of the intersection point. If they do not intersect, return false.

    判断两线段是否相交(点1与点2组成线段1,点3与点4组成线段2),相交返回交点坐标,不相交返回false。

    mathgeo.lineCross([[0, 0], [6, 6]], [[6.5, 1.5], [0.5, 3]]); // [2.5, 2.5]
    mathgeo.lineCross([[0, 0], [1, 1]], [[6.5, 1.5], [0.5, 3]]); // false
  • getClosestPointIdx([x, y], pointGroup, minDist)

    Find the index of the point in the pointGroup which is nearest to point[x,y], to meet the distance less than minDist, and return -1 if none is not satisfied.

    找出点集合pointGroup中距离点[x,y]最近的点下标,要满足距离小于minDist,如果没有满足的返回-1。

    const pointGroup = [
        [0, 1],
        [2.5, 6],
        [2.6, -9]
    ];
    mathgeo.getClosestPointIdx([0, 0], pointGroup, 1.5); // 0
    mathgeo.getClosestPointIdx([10, 1], pointGroup, 5); // -1
  • getClosetLineIdx([x, y], lineGroup, minDist)

    Find the index of the line in the lineGroup which is nearest to point[x,y], to meet the distance less than minDist, and return -1 if none is not satisfied.

    找出线集合lineGroup中距离点[x,y]最近的线下标,要满足距离小于minDist,如果没有满足的返回-1。

    const lineGroup = [
        [[0, 1], [1, 2]],
        [[3.5, 6], [-12, 9]],
        [[2, 5], [9, -11.6]]
    ];
    mathgeo.getClosetLineIdx([9, -8], lineGroup, 10); // 2
    mathgeo.getClosetLineIdx([1000, -8], lineGroup, 10); // -1
  • pointOnLine([x, y], [[x1, y1], [x2, y2]], t)

    Determine if the point is on line segment. t is the deviation value (default is 0.01). If the deviation range is less than t, the point is also considered to be on the line segment.

    判断点是否在线段上。t为偏差值(默认为0.01),如果偏差范围小于t,也认为在线段上。

    const line = [[0.5, 6.77], [10.654, 4.5628]];
    mathgeo.pointOnLine([4.3, 5.9], line, 0.01); // true
    mathgeo.pointOnLine([4.3, 5.1], line, 0.5); // true
    mathgeo.pointOnLine([4.3, 5.1], line, 0.05); // false

To be continued...