1. Funções trigonométricas em Java
Quando estudamos números de arredondamento anteriormente, nos familiarizamos com a Mathclasse e alguns de seus métodos. Veremos agora esta classe com mais detalhes.
Como o nome indica, a Mathclasse contém métodos para as operações matemáticas usadas com mais frequência pelos programadores. Aqui estão os mais interessantes:
| Método | Descrição | |
|---|---|---|
|
Retorna o seno do ângulo d, em radianos |
|
|
Retorna o cosseno do ângulo d, em radianos |
|
|
Retorna a tangente do ângulo d, em radianos |
|
|
Retorna o arco-seno | |
|
Retorna o arco-seno | |
|
Retorna o arco tangente | |
|
Retorna o seno hiperbólico | |
|
Retorna o cosseno hiperbólico | |
|
Retorna a tangente hiperbólica | |
Os métodos , e assumem um ângulo expresso em radianos. Para converter um ângulo de graus para radianos e vice-versa, a classe oferece dois métodos especiais:Math.sin()Math.cos()Math.tan()Math
| Método | Descrição |
|---|---|
|
Converte um ângulo de graus para radianos |
|
Converte um ângulo de radianos para graus |
A propósito, além dos métodos, a Mathclasse também possui duas variáveis constantes (campos estáticos da classe):
| Constante | Descrição |
|---|---|
|
A constante "Pi" é igual a3.141592653589793 |
|
A constante "E" é igual a2.718281828459045 |
Todas essas funções podem ser muito úteis se você decidir escrever seus próprios jogos, trabalhar com gráficos ou simplesmente calcular o comprimento de um caminho em um mapa.
Por exemplo, se você deseja calcular sin(45°), veja como fazê-lo:
Math.sin( Math.toRadians(45) )
Aqui está um exemplo:
public class Main
{
public static int N = 10;
public static void drawValue(double y)
{
int value = (int) (y * N) + N;
for (int i = 0; i < 2 * N; i++)
{
char c = i == N ? '|': '.';
if (i == value)
c = '*';
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args)
{
for (int i = 0; i < 10 * N; i++)
{
double x = i * 1.0 / N;
double y = Math.sin(x);
drawValue(y);
}
}
}
2. Funções algébricas em Java
Na maioria dos casos, a matemática do ensino médio é suficiente para um programador: mesmo senos e cossenos raramente são encontrados no código. Na maioria das vezes, eles são necessários ao trabalhar com jogos, mapas ou mecanismos de jogos. 90% dos programadores nunca encontram isso.
Mas, além da geometria, os programadores às vezes precisam usar funções algébricas. E, claro, a Mathclasse contém os mais comuns:
| Método | Descrição |
|---|---|
|
raiz quadrada dea |
|
raiz cúbica dea |
|
exponenciação:ab |
|
exponencial (número de Euler elevado a uma potência):ea |
|
logaritmo natural de a:ln(a) |
|
logaritmo de base 10 de a:log10(a) |
|
logaritmo natural de x + 1:ln(x + 1) |
|
ex-1 |
Se você deseja a raiz quadrada ou cúbica de um número, os métodos sqrt(a)e cbrt(a)estão à sua disposição.
A raiz quadrada pode ser calculada da seguinte forma:
Math.sqrt(2)
Se você deseja obter uma raiz de uma potência maior, use o método de exponenciação: aelevado ¼à quarta raiz, etc.
Math.pow(2, 0.25)
Para logaritmos e expoentes, existem os métodos log(a)(logaritmo natural) e exp(x)(exponencial). Para calcular o logaritmo de base 10, temos log10(a).
Se você quiser o logaritmo de um número bcomo base a, use esta fórmula simples:loga(b) = ln(b) / ln(a)
métodos úteis
Se você estiver realizando cálculos envolvendo valores muito pequenos de x, então as duas últimas funções — log1p()e expm1()— podem ser úteis para você.
Ao adicionar doublevariáveis muito pequenas e muito grandes, muitas vezes você descobrirá que valores muito pequenos são simplesmente ignorados (descartados) como insignificantes. Na verdade, isso acontecerá se você usar os métodos log()e exp(). Para resolver isso, os programadores criaram funções que retornam apenas a "pequena parte significativa"
Exemplo:
Suponha que você queira calcular o logaritmo natural de 1 + x, onde xé . Você não pode simplesmente passar esse número para o método, pois se somar e , você obtém . é um número tão pequeno que será completamente descartado quando os números forem somados.10-20log()110-20110-20
Como a matemática geralmente envolve o cálculo log()de números próximos a 1, os programadores criaram uma maneira de contornar esse problema: em vez de passar o número em si para o método, passe apenas sua diferença de 1.
3. Mínimo e máximo
Mais duas funções úteis são min(a, b)e max(a, b). Como você provavelmente já adivinhou, o primeiro retorna o mínimo de dois números:
Math.min(a, b)
E o segundo retorna o máximo de dois números:
Math.max(a, b)
Por que precisamos dessas funções quando você sempre pode escrever ifou até mesmo usar o operador ternário (a < b ? a: b)?
É tudo sobre a legibilidade do código. Às vezes, seu código está sobrecarregado com ifinstruções e você deseja usar uma notação mais compacta. Vamos comparar:
| Código | Descrição |
|---|---|
|
Usando uma if-elsedeclaração (a maneira mais longa de escrevê-la) |
|
Usando o operador ternário Contras: - código volumoso - os cálculos são executados duas vezes |
|
Esta é uma ótima maneira de escrevê-lo, mas é um pouco redundante |
|
Apenas certo 🙂 |
4. Mínimo e máximo de vários números
Há outra ótima maneira de usar os métodos min()e max().
Para calcular o mínimo (ou máximo) de vários números ou variáveis. É muito conveniente fazer chamadas aninhadas para esses métodos.
Veja como encontrar o mínimo de 3 números:
Math.min(a, Math.min(b, c))
E daí? É super conveniente: calcule o mínimo de dois números e retorne o mínimo desse número e o terceiro número.
O mínimo de quatro números é obtido da mesma maneira:
Math.min(a, Math.min(b, Math.min(с, d)))
Dito isso, podemos escrever esta fórmula um pouco mais claramente:
Math.min(Math.min(a, b), Math.min(c, d))
Tudo funciona da mesma forma para o max()método.
Usar o if-elseoperador ou o operador ternário tornaria esses trechos de código um pouco mais complicados. Mas usar os métodos min()e max()é simplesmente perfeito.
GO TO FULL VERSION