Matematikai műveletek
A Math objektum
Ha JavaScriptben programozunk, gyakran előfordulhat, hogy matematikai függvények vagy konstansok használatára van szükségünk. Ebben nyújt nekünk segítséget a Math objektum.
Alapvető matematikai műveletek
Kerekítések
Math.round(n): a hagyományos kerekítési szabályok szerint kerekíti az n számot
Math.floor(n): lefelé kerekíti az n számot
Math.ceil(n): felfelé kerekíti az n számot
Math.trunc(n): eltávolítja a tizedesjegyeket (egészré alakít) kerekítés nélkül
| console.log(Math.round(4.7)); // 5
console.log(Math.round(4.4)); // 4
console.log(Math.floor(4.7)); // 4
console.log(Math.ceil(4.1)); // 5
console.log(Math.trunc(4.9)); // 4
console.log(Math.trunc(-4.9)); // -4
|
Abszolútérték és előjel
Math.abs(n): visszaadja az n szám abszolútértékét
Math.sign(n): visszaadja az n előjelét (-1, 0, vagy 1)
| console.log(Math.abs(-15)); // 15
console.log(Math.abs(15)); // 15
console.log(Math.sign(-42)); // -1
console.log(Math.sign(42)); // 1
console.log(Math.sign(0)); // 0
|
Hatványozás és gyökök
Math.sqrt(n): visszaadja az n szám négyzetgyökét
Math.cbrt(n): visszaadja az n szám köbgyökét
Math.pow(base, exponent): visszaadja a base exponent-edik hatványát
| console.log(Math.sqrt(16)); // 4
console.log(Math.cbrt(27)); // 3
console.log(Math.pow(2, 3)); // 8
console.log(Math.pow(5, 2)); // 25
// Alternative: exponentiation operator (**)
console.log(2 ** 3); // 8
console.log(5 ** 2); // 25
|
Minimum és maximum
Math.min(a, b, ...): visszaadja az a, b, ... számok közül a legkisebbet
Math.max(a, b, ...): visszaadja az a, b, ... számok közül a legnagyobbat
| console.log(Math.min(5, 10, 2, 8)); // 2
console.log(Math.max(5, 10, 2, 8)); // 10
// With array (using spread operator)
const numbers = [5, 10, 2, 8, 15];
console.log(Math.min(...numbers)); // 2
console.log(Math.max(...numbers)); // 15
|
Véletlen számok
Math.random(): visszaad egy véletlenszámot a [0, 1) intervallumból
Gyakorlati példák véletlen számok generálására
Véletlen szám 0 és 1 között:
| const random = Math.random();
console.log(random); // e.g., 0.6382947261
|
Véletlen szám adott intervallumban (lebegőpontos):
| function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
console.log(getRandomFloat(5, 10)); // pl.: 7.382947
|
Véletlen egész szám 1 és 10 között:
| const randomInteger = Math.floor(Math.random() * 10 + 1);
console.log(randomInteger); // 1, 2, 3, ..., 9, vagy 10
|
Véletlen egész szám min és max között (általános megoldás):
| function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandomInt(1, 6)); // Kockadobás: 1-6
console.log(getRandomInt(1, 100)); // Véletlen szám 1-100 között
|
Véletlen elem kiválasztása tömbből:
| function getRandomElement(array) {
const randomIndex = Math.floor(Math.random() * array.length);
return array[randomIndex];
}
const colors = ["red", "green", "blue", "yellow"];
console.log(getRandomElement(colors)); // pl.: "blue"
|
Trigonometrikus függvények
Math.sin(n): visszaadja n szinuszát
Math.cos(n): visszaadja n koszinuszát
Math.tan(n): visszaadja n tangensét
Math.asin(n): arkusz szinusz
Math.acos(n): arkusz koszinusz
Math.atan(n): arkusz tangens
Math.atan2(y, x): visszaadja az x, y koordinátákhoz tartozó szöget
Fontos: Ezek a függvények radiánban számolnak! Szükség esetén át kell váltani fokba.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | // Radians to degrees
function toDegrees(radians) {
return radians * (180 / Math.PI);
}
// Degrees to radians
function toRadians(degrees) {
return degrees * (Math.PI / 180);
}
console.log(Math.sin(Math.PI / 2)); // 1 (90 degrees)
console.log(Math.cos(0)); // 1 (0 degrees)
console.log(Math.tan(Math.PI / 4)); // 1 (45 degrees)
console.log(toDegrees(Math.PI)); // 180
console.log(toRadians(90)); // 1.5707... (π/2)
|
Matematikai konstansok
Math.PI: a π (pí) értéke (~3.14159)
Math.E: az Euler-féle szám értéke (~2.71828)
Math.LN2: 2 természetes alapú logaritmusa
Math.LN10: 10 természetes alapú logaritmusa
Math.SQRT2: 2 négyzetgyöke
Math.SQRT1_2: 1/2 négyzetgyöke
| console.log(Math.PI); // 3.141592653589793
console.log(Math.E); // 2.718281828459045
console.log(Math.SQRT2); // 1.4142135623730951
// Practical example: circle calculations
function calculateCircleArea(radius) {
return Math.PI * Math.pow(radius, 2);
}
console.log(calculateCircleArea(5)); // 78.53981633974483
|
Logaritmus függvények
Math.log(n): természetes alapú (e alapú) logaritmus
Math.log10(n): 10-es alapú logaritmus
Math.log2(n): 2-es alapú logaritmus
| console.log(Math.log(Math.E)); // 1
console.log(Math.log10(100)); // 2
console.log(Math.log2(8)); // 3
|
Gyakorlati példák
Figyelem
Az itt található példák nem szükségszerűen a tananyag részei, csak különböző megvalósítások gyakran előforduló, illetve zh-n esetlegesen megjelenő problémákra. Ezeket elvileg bárkinek meg kell tudnia írnia, azonban az otthoni gyakorláshoz segítséget nyújthatnak.
1. Kockadobás szimuláció
| function rollDice(sides = 6) {
return Math.floor(Math.random() * sides) + 1;
}
console.log("Dice roll:", rollDice()); // 1-6
console.log("D20 roll:", rollDice(20)); // 1-20
|
2. Távolság számítása két pont között
| function calculateDistance(x1, y1, x2, y2) {
const dx = x2 - x1;
const dy = y2 - y1;
return Math.sqrt(dx * dx + dy * dy);
}
console.log(calculateDistance(0, 0, 3, 4)); // 5
|
3. Szám kerekítése adott tizedesjegyre
| function roundToDecimals(number, decimals) {
const factor = Math.pow(10, decimals);
return Math.round(number * factor) / factor;
}
console.log(roundToDecimals(3.14159, 2)); // 3.14
console.log(roundToDecimals(2.71828, 3)); // 2.718
|
4. Érték korlátozása min és max közé (clamp)
| function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
console.log(clamp(5, 0, 10)); // 5
console.log(clamp(-5, 0, 10)); // 0
console.log(clamp(15, 0, 10)); // 10
|
5. Százalék számítás
| function calculatePercentage(value, total) {
return Math.round((value / total) * 100);
}
console.log(calculatePercentage(25, 100)); // 25%
console.log(calculatePercentage(7, 20)); // 35%
|
6. Random szín generálás (hex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | function getRandomColor() {
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
return `rgb(${r}, ${g}, ${b})`;
}
console.log(getRandomColor()); // pl.: "rgb(142, 68, 203)"
// Hex format
function getRandomHexColor() {
return '#' + Math.floor(Math.random() * 16777215).toString(16).padStart(6, '0');
}
console.log(getRandomHexColor()); // pl.: "#8e44cb"
|