1dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond/* 2dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Licensed to the Apache Software Foundation (ASF) under one or more 3dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * contributor license agreements. See the NOTICE file distributed with 4dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * this work for additional information regarding copyright ownership. 5dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * The ASF licenses this file to You under the Apache License, Version 2.0 6dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * (the "License"); you may not use this file except in compliance with 7dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * the License. You may obtain a copy of the License at 8dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * 9dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * http://www.apache.org/licenses/LICENSE-2.0 10dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * 11dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Unless required by applicable law or agreed to in writing, software 12dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * distributed under the License is distributed on an "AS IS" BASIS, 13dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * See the License for the specific language governing permissions and 15dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * limitations under the License. 16dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 17dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 18dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondpackage org.apache.commons.math.stat.clustering; 19dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 20dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.io.Serializable; 21dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.util.ArrayList; 22dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.util.List; 23dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 24dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond/** 25dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Cluster holding a set of {@link Clusterable} points. 26dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @param <T> the type of points that can be clustered 27dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @version $Revision: 771076 $ $Date: 2009-05-03 18:28:48 +0200 (dim. 03 mai 2009) $ 28dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @since 2.0 29dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 30dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondpublic class Cluster<T extends Clusterable<T>> implements Serializable { 31dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 32dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** Serializable version identifier. */ 33dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond private static final long serialVersionUID = -3442297081515880464L; 34dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 35dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** The points contained in this cluster. */ 36dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond private final List<T> points; 37dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 38dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** Center of the cluster. */ 39dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond private final T center; 40dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 41dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** 42dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Build a cluster centered at a specified point. 43dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @param center the point which is to be the center of this cluster 44dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 45dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond public Cluster(final T center) { 46dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond this.center = center; 47dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond points = new ArrayList<T>(); 48dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond } 49dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 50dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** 51dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Add a point to this cluster. 52dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @param point point to add 53dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 54dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond public void addPoint(final T point) { 55dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond points.add(point); 56dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond } 57dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 58dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** 59dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Get the points contained in the cluster. 60dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @return points contained in the cluster 61dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 62dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond public List<T> getPoints() { 63dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond return points; 64dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond } 65dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 66dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond /** 67dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Get the point chosen to be the center of this cluster. 68dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @return chosen cluster center 69dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */ 70dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond public T getCenter() { 71dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond return center; 72dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond } 73dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond 74dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond} 75