1. Funções trigonométricas em Java
Quando estudamos números de arredondamento anteriormente, nos familiarizamos com a Math
classe e alguns de seus métodos. Veremos agora esta classe com mais detalhes.
Como o nome indica, a Math
classe 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 Math
classe 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 Math
classe 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: a
elevado ¼
à 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 b
como 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 double
variá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-20
log()
1
10-20
1
10-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 if
ou 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 if
instruções e você deseja usar uma notação mais compacta. Vamos comparar:
Código | Descrição |
---|---|
|
Usando uma if-else declaraçã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-else
operador 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