1 /* 2 * Licensed to the Hipparchus project under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The Hipparchus project licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * https://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.hipparchus.geometry; 18 19 import org.hipparchus.exception.LocalizedCoreFormats; 20 import org.hipparchus.exception.MathIllegalArgumentException; 21 22 import java.util.List; 23 24 /** Utilities for geometry. 25 * @since 4.0 26 */ 27 public class Geometry { 28 29 /** 30 * Private constructor for a utility class. 31 */ 32 private Geometry() { 33 // nothing to do 34 } 35 36 /** 37 * Compute the barycenter of n points. 38 * @param <S> Type of the space. 39 * @param <P> Type of the points in space. 40 * @param points points generating the barycenter 41 * @return barycenter of the points 42 */ 43 public static <S extends Space, P extends Point<S, P>> P barycenter(final List<P> points) { 44 45 // safety check 46 if (points.isEmpty()) { 47 throw new MathIllegalArgumentException(LocalizedCoreFormats.NUMBER_OF_ELEMENTS_SHOULD_BE_POSITIVE, 0); 48 } 49 50 // compute barycenter by moving from point to point 51 P current = points.get(0); 52 for (int i = 1; i < points.size(); i++) { 53 current = points.get(i).moveTowards(current, ((double) i) / (i + 1)); 54 } 55 56 return current; 57 58 } 59 60 }