// Copyright (c) 2018 LEAP Encryption Access Project // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package main import ( "github.com/hongshibao/go-kdtree" ) type EuclideanPoint struct { kdtree.Point Vec []float64 } func (p EuclideanPoint) Dim() int { return len(p.Vec) } func (p EuclideanPoint) GetValue(dim int) float64 { return p.Vec[dim] } func (p EuclideanPoint) Distance(other kdtree.Point) float64 { var ret float64 for i := 0; i < p.Dim(); i++ { tmp := p.GetValue(i) - other.GetValue(i) ret += tmp * tmp } return ret } func (p EuclideanPoint) PlaneDistance(val float64, dim int) float64 { tmp := p.GetValue(dim) - val return tmp * tmp } func NewEuclideanPoint(vals ...float64) *EuclideanPoint { ret := &EuclideanPoint{} for _, val := range vals { ret.Vec = append(ret.Vec, val) } return ret }