Kihagyás

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
1
2
3
4
5
6
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)
1
2
3
4
5
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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
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:

1
2
const random = Math.random();
console.log(random);  // e.g., 0.6382947261

Véletlen szám adott intervallumban (lebegőpontos):

1
2
3
4
5
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:

1
2
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):

1
2
3
4
5
6
7
8
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:

1
2
3
4
5
6
7
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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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
1
2
3
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ó

1
2
3
4
5
6
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

1
2
3
4
5
6
7
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

1
2
3
4
5
6
7
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)

1
2
3
4
5
6
7
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

1
2
3
4
5
6
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"