1. Java'da trigonometrik fonksiyonlar
Daha önce yuvarlama sayılarını incelediğimizde, Math
sınıf ve bazı yöntemleri hakkında bilgi sahibi olduk. Şimdi bu sınıfa daha detaylı bakacağız.
Adından da anlaşılacağı gibi, Math
sınıf, programcılar tarafından en sık kullanılan matematiksel işlemler için yöntemler içerir. İşte en ilginç olanlar:
Yöntem | Tanım | |
---|---|---|
|
Açının sinüsünü d radyan cinsinden verir |
|
|
Açının kosinüsünü d radyan cinsinden verir |
|
|
Açının tanjantını d radyan cinsinden verir |
|
|
Arksinüsü döndürür | |
|
Arccosine döndürür | |
|
arktanjantı döndürür | |
|
Hiperbolik sinüsü döndürür | |
|
Hiperbolik kosinüsü döndürür | |
|
Hiperbolik teğeti döndürür |
, ve yöntemleri radyan cinsinden ifade edilen bir açı alır. Bir açıyı dereceden radyana veya tam tersine dönüştürmek için sınıf iki özel yöntem sunar:Math.sin()
Math.cos()
Math.tan()
Math
Yöntem | Tanım |
---|---|
|
Bir açıyı dereceden radyana dönüştürür |
|
Bir açıyı radyandan dereceye dönüştürür |
Bu arada, metotlara ek olarak, sınıfın ayrıca iki sabit değişkeniMath
vardır (sınıfın statik alanları):
Devamlı | Tanım |
---|---|
|
"Pi" sabiti eşittir3.141592653589793 |
|
"E" sabiti şuna eşittir:2.718281828459045 |
Kendi oyunlarınızı yazmaya, grafiklerle çalışmaya veya sadece bir haritadaki bir yolun uzunluğunu hesaplamaya karar verirseniz, tüm bu işlevler sizin için çok yararlı olabilir.
Örneğin, hesaplamak istiyorsanız sin(45°)
, bunu şu şekilde yapabilirsiniz:
Math.sin( Math.toRadians(45) )
İşte bir örnek:
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. Java'da cebirsel işlevler
Çoğu durumda, bir programcı için lise matematiği yeterlidir: kodda sinüsler ve kosinüsler bile çok nadiren bulunur. Çoğu zaman oyunlar, haritalar veya oyun motorları ile çalışırken ihtiyaç duyulur. Programcıların %90'ı bununla hiç karşılaşmaz.
Ancak geometrinin yanı sıra, programcılar bazen cebirsel işlevleri kullanmak zorunda kalırlar. Ve elbette, Math
sınıf en yaygın olanları içerir:
Yöntem | Tanım |
---|---|
|
kareköküa |
|
kübik köküa |
|
üs alma:ab |
|
üstel (Euler'in sayısı bir güce yükseltildi):ea |
|
doğal logaritması a :ln(a) |
|
10 tabanlı logaritması a :log10(a) |
|
doğal logaritması x + 1 :ln(x + 1) |
|
ex-1 |
Bir sayının karesini veya küp kökünü istiyorsanız, sqrt(a)
ve cbrt(a)
yöntemleri hizmetinizdedir.
Karekök şu şekilde hesaplanabilir:
Math.sqrt(2)
Daha yüksek bir kuvvete sahip bir kök elde etmek istiyorsanız, üs alma yöntemini kullanın: a
to ¼
4. köktür, vb.
Math.pow(2, 0.25)
log(a)
Logaritmalar ve üsler için (doğal logaritma) ve exp(x)
(üstel) yöntemler vardır . 10 tabanlı logaritmayı hesaplamak için elimizde log10(a)
.
b
Bir sayının logaritmasının taban olmasını istiyorsanız a
, şu basit formülü kullanın:loga(b) = ln(b) / ln(a)
Yararlı yöntemler
Çok küçük değerler içeren hesaplamalar yapıyorsanız x
, son iki işlev - log1p()
ve expm1()
- sizin için yararlı olabilir.
Çok küçük ve çok büyük değişkenler eklerken double
, genellikle çok küçük değerlerin önemsiz olarak görmezden gelindiğini (atıldığını) görürsünüz. log()
Aslında, and yöntemlerini kullanırsanız bu gerçekleşir exp()
. Bunu çözmek için, programcılar yalnızca "küçük önemli parçayı" döndüren işlevler buldular.
Örnek:
1 + x
Diyelim ki , nerede x
' nin doğal logaritmasını hesaplamak istiyorsunuz ? Bu sayıyı yönteme kolayca iletemezsiniz , çünkü ve eklerseniz elde edersiniz . o kadar küçük bir sayı ki, sayılar eklendiğinde tamamen atılacak.10-20
log()
1
10-20
1
10-20
Matematik genellikle ' log()
ye yakın sayıların hesaplanmasını içerdiğinden 1
, programcılar bu sorunu aşmanın bir yolunu buldular: yönteme sayının kendisini iletmek yerine, yalnızca 'den olan farkını iletin 1
.
3. Minimum ve maksimum
İki kullanışlı işlev daha vardır min(a, b)
ve max(a, b)
. Muhtemelen zaten tahmin ettiğiniz gibi, ilki en az iki sayıyı döndürür:
Math.min(a, b)
İkincisi, maksimum iki sayıyı döndürür:
Math.max(a, b)
if
Her zaman üçlü işleç yazabileceğiniz ve hatta kullanabileceğiniz halde neden bu işlevlere ihtiyacımız var (a < b ? a: b)
?
Her şey kodun okunabilirliği ile ilgili. Bazen kodunuz if
ifadelerle aşırı yüklenir ve daha kompakt notasyon kullanmak istersiniz. Hadi karşılaştıralım:
kod | Tanım |
---|---|
|
Bir ifade kullanma if-else (onu yazmanın en uzun yolu) |
|
Üçlü operatörü kullanma Eksileri: - hacimli kod - hesaplamalar iki kez yapılır |
|
Bu, onu yazmanın harika bir yolu, ama biraz gereksiz |
|
Aynen öyle 🙂 |
4. Birkaç sayının minimum ve maksimum değeri
min()
and yöntemlerini kullanmanın başka bir harika yolu daha var max()
.
Birkaç sayı veya değişkenin minimumunu (veya maksimumunu) hesaplamak için. Bu yöntemlere iç içe çağrılar yapmak çok uygundur.
En az 3 sayının nasıl bulunacağı aşağıda açıklanmıştır:
Math.min(a, Math.min(b, c))
Ne olmuş? Çok kullanışlı: iki sayının minimumunu hesaplayın ve ardından bu sayının minimumunu ve üçüncü sayıyı döndürün.
En az dört sayı aynı şekilde elde edilir:
Math.min(a, Math.min(b, Math.min(с, d)))
Bununla birlikte, bu formülü biraz daha net yazabiliriz:
Math.min(Math.min(a, b), Math.min(c, d))
Her şey yöntem için aynı şekilde çalışır max()
.
if-else
Operatörü veya üçlü operatörü kullanmak, bu kod parçacıklarını biraz daha hantal hale getirir. Ancak min()
ve max()
yöntemlerini kullanmak tek kelimeyle mükemmel.