10ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska/* 20ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Copyright (C) 2016 The Android Open Source Project 30ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 40ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Licensed under the Apache License, Version 2.0 (the "License"); 50ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * you may not use this file except in compliance with the License. 60ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * You may obtain a copy of the License at 70ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 80ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * http://www.apache.org/licenses/LICENSE-2.0 90ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 100ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Unless required by applicable law or agreed to in writing, software 110ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * distributed under the License is distributed on an "AS IS" BASIS, 120ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * See the License for the specific language governing permissions and 140ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * limitations under the License. 150ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */ 160ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.core.math; 180ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska 190ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska/** 200ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * A utility class providing functions useful for common mathematical operations. 210ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */ 220ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurskapublic class MathUtils { 230ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska 2413efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska private MathUtils() {} 2513efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska 260ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska /** 270ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * This method takes a numerical value and ensures it fits in a given numerical range. If the 280ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * number is smaller than the minimum required by the range, then the minimum of the range will 290ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * be returned. If the number is higher than the maximum allowed by the range then the maximum 300ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * of the range will be returned. 310ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 320ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param value the value to be clamped. 330ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param min minimum resulting value. 340ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param max maximum resulting value. 350ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 360ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @return the clamped value. 370ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */ 3813efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska public static float clamp(float value, float min, float max) { 390ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska if (value < min) { 400ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return min; 410ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } else if (value > max) { 420ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return max; 430ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 440ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return value; 450ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 460ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska 470ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska /** 480ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * This method takes a numerical value and ensures it fits in a given numerical range. If the 490ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * number is smaller than the minimum required by the range, then the minimum of the range will 500ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * be returned. If the number is higher than the maximum allowed by the range then the maximum 510ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * of the range will be returned. 520ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 530ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param value the value to be clamped. 540ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param min minimum resulting value. 550ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param max maximum resulting value. 560ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 570ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @return the clamped value. 580ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */ 590ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska public static double clamp(double value, double min, double max) { 600ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska if (value < min) { 610ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return min; 620ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } else if (value > max) { 630ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return max; 640ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 650ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return value; 660ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 670ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska 680ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska /** 690ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * This method takes a numerical value and ensures it fits in a given numerical range. If the 700ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * number is smaller than the minimum required by the range, then the minimum of the range will 710ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * be returned. If the number is higher than the maximum allowed by the range then the maximum 720ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * of the range will be returned. 730ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 740ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param value the value to be clamped. 750ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param min minimum resulting value. 760ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @param max maximum resulting value. 770ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * 780ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * @return the clamped value. 790ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */ 800ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska public static int clamp(int value, int min, int max) { 810ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska if (value < min) { 820ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return min; 830ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } else if (value > max) { 840ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return max; 850ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 860ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska return value; 870ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska } 880ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska} 89