    /**
     * 计算X、Y、Z的平方和并返回
     * @param {Point} point 点对象
     * @returns {Number} 平方和
     */
    function magnitudeSquared(point) {
      // 如果有z值
      if (point.hasZ) {
        return (
          point.coordinates[0] * point.coordinates[0] +
          point.coordinates[1] * point.coordinates[1] +
          point.coordinates[2] * point.coordinates[2]
        )
      }
      return (
        point.coordinates[0] * point.coordinates[0] +
        point.coordinates[1] * point.coordinates[1]
      )
    }

    /**
     * 进行开根号计算
     * @param {Point} point 点对象
     * @returns {Number} 开根号后的值
     */
    function magnitude(point) {
      return Math.sqrt(magnitudeSquared(point))
    }

    /**
     * 归一化计算
     * @param {Point} point 点对象
     * @returns {Object} 归一化后的值
     */
    function normalize(point) {
      const result = point.clone()
      // 开根号计算
      const magnitude1 = magnitude(result)
      result.coordinates[0] /= magnitude1
      result.coordinates[1] /= magnitude1
      if (result.hasZ) {
        result.coordinates[2] /= magnitude1
      }
      return result
    }

    export { normalize }