Trójkąty

Strona: edu-on.pl
Kurs: edu-on.pl
Książka: Trójkąty
Wydrukowane przez użytkownika:
Data: niedziela, 8 listopada 2026, 12:30

1. Trójkąt

Trójkąt to figura geometryczna, która ma trzy boki i trzy kąty. Jest to jeden z podstawowych kształtów w geometrii. Trójkąty można klasyfikować na podstawie długości boków oraz miar kątów.

Trójkąt jest jedną z najprostszych, ale bardzo ważnych figur w matematyce, wykorzystywaną w różnych dziedzinach, np. w trygonometrii czy w geometrii analitycznej.

 

Trójkąt w informatyce odgrywa bardzo ważną rolę, bo jest podstawowym elementem używanym w wielu dziedzinach tej nauki i praktyki:

1. Grafika komputerowa

  • W grafice 2D i 3D powierzchnie obiektów najczęściej dzieli się na siatkę trójkątów (tzw. triangulacja).
    Dlaczego trójkąty? Bo zawsze leżą w jednej płaszczyźnie i łatwo się je przetwarza matematycznie.

  • Modele 3D w grach, filmach i VR to w rzeczywistości ogromne zbiory trójkątów (czasem miliony).

  • Algorytmy renderowania (np. w kartach graficznych) są zoptymalizowane właśnie pod kątem rysowania trójkątów. 

 

2. Geometria obliczeniowa

  • Trójkąty są podstawą algorytmów w grafice, CAD, GIS (np. triangulacja Delaunaya do dzielenia przestrzeni).

  • Używa się ich w obliczeniach kolizji – sprawdzanie, czy punkt, linia lub obiekt przecina trójkąt.

3. Sieci komputerowe i struktury danych

  • Pojawia się pojęcie trójkąta w grafach – jeśli trzy węzły są połączone, tworzą cykl długości 3.

  • W analizie sieci społecznościowych liczy się trójkąty, żeby badać np. znajomości i powiązania.

4. Algorytmy i matematyka komputerowa

  • Trygonometria (związana z trójkątami) jest podstawą w obliczeniach grafiki 3D, robotyki, sztucznej inteligencji (np. rozpoznawanie obrazu).

2. Pole trójkąta

Aby policzyć pole trójkata o podstawie długości \(a\) i wysokości długości \(h\) należy zastosować wzór \(P=\frac{1}{2}\cdot a \cdot h\).

Wyznaczanie pola trójkąta mając daną podstawę i wysokość
Python C++
# Program: Pole trójkąta z podstawą i wysokością
# Autor: Jarosław Drzeżdżon
# Data: 2025-09-16

a = input("Dlugosc podstawy trojkata: ")
a = int(a)
h = int(input("Wysokosc trojkata: "))

area = 0.5 * a * h
print(f"Pole trojkata wynosi {area}")
// # Program: Pole trójkąta z podstawą i wysokością
// Autor: Jarosław Drzeżdżon
// Data: 2025-09-15

#include <iostream>
using namespace std;

int main() 
{
    double a, h, area;

    cout << "Dlugosc podstawy trojkata: ";
    cin >> a;
    cout << "Wysokosc trojkata: ";
    cin >> h;

    area = 0.5 * a * h;
    cout << "Pole trojkata wynosi " << area << endl;

    return 0;
}

Efekt wykonania kodu programu:


Dlugosc podstawy trojkata: 4
Wysokosc trojkata: 3
Pole trojkata wynosi 6

 

3. Trójkąt równoboczny

Trojkątem równobocznym nazywamy trójkąt, którego boki są równe. Pole trójkąta równobocznego możemy wyznaczyć ze wzoru \(P=\frac{a^2 \cdot \sqrt{3}}{4}\).

Python C++
"""
Program: Pole trójkąta równobocznego
Autor: Jarosław Drzeżdżon
Data: 2025-09-16
"""

import math

a = input("Dlugosc podstawy trojkata: ")
a = float(a)

area = a**2 * math.sqrt(3) / 4
print(f"Pole trojkata wynosi {area}")
print(f"Pole trojkata wynosi {area:.2f}")
/*
Program: Pole trójkąta równobocznego
Autor: Jarosław Drzeżdżon
Data: 2025-09-16
*/

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    double a, area;

    cout << "Dlugosc podstawy trojkata: ";
    cin >> a;

    area = (a * a * sqrt(3)) / 4;
    cout << "Pole trojkata wynosi " << area << endl;

    cout.precision(2);
    cout << "Pole trojkata wynosi " << fixed << area << endl;

    return 0;
}

Efekt wykonania kodu programu:


Dlugosc podstawy trojkata: 2
Pole trojkata wynosi 1.73205
Pole trojkata wynosi 1.73

 

4. Warunek trójkata

W geometrii warunek istnienia trójkąta mówi, że suma długości dwóch dowolnych boków musi być większa od długości trzeciego boku.

Jeżeli boki trójkata mają długości \(a\), \(b\) i \(c\), to warunek ten zapisujemy tak:

\(a+b>c\) oraz \(a+c>b\) oraz \(b+c>a\)

Boki trójkąta
4 5 3 2 3 6
Trójkąt Nie jest to trójkąt

 

Python C++
"""
Warunek trójkąta
Autor: Jarosław Drzeżdżon
Data: 2025-09-16
"""

# Wczytanie długości boków
boki = input().split()
a = int(boki[0])
b = int(boki[1])
c = int(boki[2])

# Sprawdzenie warunku istnienia trojkata
if a + b > c and a + c > b and b + c > a:
    print("Z tych bokow mozna zbudowac trojkat.")
else:
    print("Z tych bokow nie da sie zbudowac trojkata.")
// Warunek trójkąta
// Autor: Jarosław Drzeżdżon
// Data: 2025-09-16

#include <iostream>
using namespace std;

int main()
{
    double a, b, c;

    cout << "Podaj dlugosci bokow: ";
    cin >> a >> b >> c;
    
    // Sprawdzenie warunku istnienia trójkąta
    if (a + b > c && a + c > b && b + c > a)
    {
        cout << "Z tych bokow mozna zbudowac trojkat." << endl;
    }
    else
    {
        cout << "Z tych bokow nie da sie zbudowac trojkata." << endl;
    }

    return 0;
}

Efekt wykonania kodu programu:


2 3 4
Z tych bokow mozna zbudowac trojkat.

3 5 9
Z tych bokow nie da sie zbudowac trojkata.

 

5. Trójkąt prostokątny

Aby sprawdzić, czy trókąt jest prostokątny, to wystarczy sprawdzić wszystkie trzy kombinacje twierdzenie Pitagorasa.

 

Python C++
# Wczytanie długości boków
boki = input("Podaj dlugosci bokow: ").split()
boki = list(map(int, boki))
a = boki[0]
b = boki[1]
c = boki[2]

# Sprawdzenie warunku istnienia trójkąta
if a + b > c and a + c > b and b + c > a:
    # Sprawdzenie, czy jest prostokątny (wszystkie kombinacje)
    if a**2 + b**2 == c**2 or a**2 + c**2 == b**2 or b**2 + c**2 == a**2:
        print("Z tych bokow mozna zbudowac trojkat prostokatny.")
    else:
        print("Z tych bokow mozna zbudowac trojkat, ale nie jest prostokatny.")
else:
    print("Z tych bokow nie da sie zbudowac trojkata.")
#include <iostream>
#include <cmath> // dla abs() i sqrt()
using namespace std;

int main()
{
    double a, b, c;

    // Wczytanie długości boków
    cout << "Podaj dlugosci bokow: ";
    cin >> a >> b >> c;

    // Sprawdzenie warunku istnienia trójkąta
    if (a + b > c && a + c > b && b + c > a)
    {
        // Sprawdzenie, czy trójkąt jest prostokątny (wszystkie kombinacje)
        if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
            cout << "Z tych bokow mozna zbudowac trojkat prostokatny." << endl;
        else
            cout << "Z tych bokow mozna zbudowac trojkat, ale nie jest prostokatny." << endl;
    }
    else
        cout << "Nie jest to trojkat";

    return 0;
}

Efekt wykonania kodu programu:

3 4 5 
Z tych bokow mozna zbudowac trojkat prostokatny.

 

6. Wzór Herona

Pole trójkąta można również policzyć ze wzór Herona. Wzór ten pozwala obliczyć pole dowolnego trójkąta, gdy znamy długości wszystkich trzech boków \(a\), \(b\) i \(c\).

We wzorze Herona najpierw obliczmy połowę obwodu trójkąta:

\(p = \frac{a+b+c}{2}\)

\( P=\sqrt{p\cdot(p-a)\cdot (p-b) \cdot (p-b) \cdot (p-c)} \)

 

Python C++
# Program: Pole trójkąta za pomocą wzoru Herona
# Autor: Jarosław Drzeżdżon
# Data: 2025-09-16

from math import sqrt

a = float(input("Podaj dlugosc boku a: "))
b = float(input("Podaj dlugosc boku b: "))
c = float(input("Podaj dlugosc boku c: "))

# Sprawdzenie warunku istnienia trójkąta
if a + b > c and a + c > b and b + c > a:
    s = (a + b + c) / 2
    area = sqrt(s * (s - a) * (s - b) * (s - c))
    print(f"Pole trojkata wynosi {area:.2f}")
else:
    print("Z tych bokow nie da sie zbudowac trojkata.")

//Program : Wzór Herona
//Autor : Jarosław Drzeżdżon
//Data : 2025 - 09 - 16

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    double a, b, c;

    // Wczytanie boków
    cout << "Podaj dlugosc boku a: ";
    cin >> a;
    cout << "Podaj dlugosc boku b: ";
    cin >> b;
    cout << "Podaj dlugosc boku c: ";
    cin >> c;

    // Sprawdzenie warunku istnienia trójkąta
    if (a + b > c && a + c > b && b + c > a)
    {
        double s = (a + b + c) / 2;
        double area = sqrt(s * (s - a) * (s - b) * (s - c));
        cout.precision(2);
        cout << fixed << "Pole trojkata wynosi " << area << endl;
    }
    else
    {
        cout << "Z tych bokow nie da sie zbudowac trojkata." << endl;
    }

    return 0;
}

Efekt wykonania kodu programu:

Pole: 9.789

7. Pole trójkąta z wierzchołkami

Aby obliczyć pole trójkąta, znając współrzędne jego wierzchołków \(A(x_A, y_A)\), \(B(x_B, y_B)\) i \(C(x_C, y_C)\) można skorzystać ze wzoru

\[P=\frac{1}{2}|(x_B-x_A)(y_C-y_A)-(y_B-y_A)(x_C-x_A)|\]

 

 
# Program: Pole trójkąta z trzema wierzchołkami
# Autor: Jarosław Drzeżdżon
# Data: 2025-09-17

def pole_trojkata(A, B, C):
    """
    Oblicza pole trójkąta o wierzchołkach A(xA,yA), B(xB,yB), C(xC,yC)
    korzystając ze wzoru z wyznacznikiem.
    """
    xA, yA = A
    xB, yB = B
    xC, yC = C

    pole = abs(xA*(yB - yC) + xB*(yC - yA) + xC*(yA - yB)) / 2
    return pole


# Przykład użycia:
A = (1, 2)
B = (4, 6)
C = (5, 2)

print("Pole trójkąta:", pole_trojkata(A, B, C))
//Pole trójkąta z trzema wierzchołkami
//Autor: Jarosław Drzeżdżon
//Data: 2025-09-17

#include <iostream>
#include <cmath>
#include <utility>

using namespace std;

double poleTrojkata(pair<double,double> A, pair<double,double> B, pair<double,double> C) 
{
    double xA = A.first, yA = A.second;
    double xB = B.first, yB = B.second;
    double xC = C.first, yC = C.second;

    double pole = fabs(xA*(yB - yC) + xB*(yC - yA) + xC*(yA - yB)) / 2.0;

    return pole;
}

int main() 
{
    pair<double,double> A = {1, 2};
    pair<double,double> B = {4, 6};
    pair<double,double> C = {5, 2};

    cout << "Pole trojkata: " << poleTrojkata(A, B, C) << endl;

    return 0;
}

Efekt wykonania kodu programu:

Pole trójkąta 8.00

8. Wzór Picka

Wzór Picka to klasyczny wynik z geometrii dyskretnej, dotyczący wielokątów kratowych (czyli takich, których wszystkie wierzchołki leżą w punktach o współrzędnych całkowitych).

Mówi on, że dla takiego wielokąta: \[P=W+\frac{B}{2}-1\]

gdzie:

  • \(P\) – pole wielokąta,
  • \(W\) – liczba punktów kratowych wewnątrz wielokąta,
  • \(B\) – liczba punktów kratowych na brzegu wielokąt

Przykład
W poniższym wielokącie znajduje się 5 punktów kratowych, a na jego brzegi jest 6 punktów kratowych. 

czyli:
\(W = 5\)
\(B = 6\)

Korzystając ze wzoru Picka \(P=5+\frac{1}{2} \cdot 6 -1 = 5+3-1=7\).

 

Wzór Picka uszczegółowiony do trójkąta kratowego - wierzchołki trójkąta leżą w punktach o współrzędnych całkowitych, nie zmienia swojej postaci, innymi słowy dalej możemy skorzystać ze wzoru:

\[P=W+\frac{B}{2}-1\]

gdzie:

  • \(P\) – pole wielokąta,
  • \(W\) – liczba punktów kratowych wewnątrz wielokąta,
  • \(B\) – liczba punktów kratowych na brzegu wielokąt

 

Przykład
Weźmy trójkąt prostokątny o wierzchołkach: \((0,0)\), \((0,4)\), \((3,0)\). 

Punktów wewnątrz trójkąta jest \(3\)
Punktów na krawędzi jest \(8\).

Podstawiamy do wzoru Picka: \(P=3+\frac{1}{2}\cdot 8-1 = 3+4-1=6\).

 

Wzór na pole dowolnego trójkąta kratowego

przy pomocy Picka (czyli w postaci zależnej tylko od punktów na bokach)

Rozważmy trójkąt kratowy o wierzchołkach \(A\), \(B\), \(C\) w punktach o współrzędnych całkowitych.

Każdy bok trójkąta jest odcinkiem między dwoma punktami kratowymi. Liczbę punktów kratowych na odcinku między punktami \(A=(x_A, y_A)\), \(B=(x_B,y_B)\) można znaleźć ze wzoru:

\[B_{AB}=gcd(|x_B-x_A|, |y_B-y_A|)+1\], gdzie \(gcd\), to największy wspólny dzielnik.

Czyli liczba punktów na wszystkich bokach trójkata jest równa

\[B=B_{AB}+B_{AB}+B_{BC}+B_{CA}-3\]

Ostateczny wzór Picka dla trójkąta

\[P=W+\frac{1}{2}(gcd(|x_B-x_A|, |y_B-y_A|)+ |x_C-x_B|, |y_C-y_B|) + |x_A-x_C|, |y_A-y_C|))-1\]

 

Python C++
# Program: Pole trójkąta z użyciem wzoru Picka
# Autor: Jarosław Drzeżdżon
# Data: 2025-09-17

from math import gcd

def pick_triangle_area(A, B, C, I):
    """
    Oblicza pole trójkąta kratowego za pomocą wzoru Picka.
    
    A, B, C: wierzchołki trójkąta w postaci (x, y)
    W: liczba punktów kratowych wewnątrz trójkąta
    """
    # Liczba punktów na bokach
    B_AB = gcd(abs(B[0]-A[0]), abs(B[1]-A[1])) + 1
    B_BC = gcd(abs(C[0]-B[0]), abs(C[1]-B[1])) + 1
    B_CA = gcd(abs(A[0]-C[0]), abs(A[1]-C[1])) + 1
    
    # Całkowita liczba punktów na brzegu
    B_total = B_AB + B_BC + B_CA - 3
    
    # Pole ze wzoru Picka
    P = I + B_total / 2 - 1
    return P

# Przykład
A = (0, 0)
B = (4, 0)
C = (0, 3)
I = 3  # liczba punktów wewnętrznych

pole = pick_triangle_area(A, B, C, I)
print("Pole trójkąta kratowego:", pole)
// Pole trójkąta z użyciem wzoru Picka
// Autor: Jarosław Drzeżdżon
// Data: 2025-09-17

#include <iostream>
#include <cmath>

using namespace std;

// Funkcja do obliczenia największego wspólnego dzielnika
int gcd(int a, int b)
{
    while (b != 0)
    {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// Funkcja do obliczenia pola trójkąta kratowego ze wzoru Picka
double pick_triangle_area(pair<int, int> A, pair<int, int> B, pair<int, int> C, int I)
{
    int B_AB = gcd(abs(B.first - A.first), abs(B.second - A.second)) + 1;
    int B_BC = gcd(abs(C.first - B.first), abs(C.second - B.second)) + 1;
    int B_CA = gcd(abs(A.first - C.first), abs(A.second - C.second)) + 1;

    int B_total = B_AB + B_BC + B_CA - 3;

    double P = I + B_total / 2.0 - 1;
    return P;
}

int main()
{
    pair<int, int> A = {0, 0};
    pair<int, int> B = {4, 0};
    pair<int, int> C = {0, 3};
    int I = 3;

    double pole = pick_triangle_area(A, B, C, I);
    cout << "Pole trojkata kratowego: " << pole << endl;

    return 0;
}

Efekt wykonania kodu programu:

0 0
0 3
4 0 
Pole trójkąta 6.00

9. Pole trójkąta z kątem

W poniższym trójkącie \(ABC\)

zostały przyjęte oznaczenie:

  • \(a, b, c \) - długości boków trójkąta \(ABC\)
  • \(\alpha, \beta, \gamma\) - miary kątów wewnętrznych trójkąta leżących, odpowiednio, przy wierzchołkach \(A, B, C\)

Pole trójkąta można również obliczyć za pomocą wzorów

\(P=\frac{1}{2}ab\cdot\sin\gamma\)
\(P=\frac{1}{2}bc\cdot\sin\alpha\)
\(P=\frac{1}{2}ac\cdot\sin\beta\) 

Wyznaczanie pola trójkąta mając dane dwa boki i kąt między nimi
Python C++
# Program: Pole trójkąta z dwoma bokami i kątem między nimi
# Autor: Jarosław Drzeżdżon
# Data: 2025-09-19

import math

def pole_trojkata(ab, ac, kat_A_stopnie):
    # Zamiana kąta ze stopni na radiany (sin w Pythonie działa na radianach)
    kat_A_radiany = math.radians(kat_A_stopnie)
    # Wzór: 1/2 * ab * ac * sin(A)
    pole = 0.5 * ab * ac * math.sin(kat_A_radiany)
    return pole

if __name__ == "__main__":
    AB = float(input("Podaj długość boku AB: "))
    AC = float(input("Podaj długość boku AC: "))
    kat_A = float(input("Podaj miarę kąta A w stopniach: "))

    pole = pole_trojkata(AB, AC, kat_A)
    print(f"Pole trójkąta wynosi: {pole:.2f}")
// # Program: Pole trójkąta z dwoma bokami i kątem między nimi
// Autor: Jarosław Drzeżdżon
// Data: 2025-09-19

#include <iostream>
#include <cmath>

using namespace std;

double poleTrojkata(double ab, double ac, double katA_stopnie) 
{
    // zamiana stopni na radiany
    double katA_radiany = katA_stopnie * M_PI / 180.0;
    // wzór: 1/2 * ab * ac * sin(A)
    return 0.5 * ab * ac * sin(katA_radiany);
}

int main() 
{
    double AB, AC, katA;
    cout << "Podaj dlugosc boku AB: ";
    cin >> AB;
    cout << "Podaj dlugosc boku AC: ";
    cin >> AC;
    cout << "Podaj miare kata A (w stopniach): ";
    cin >> katA;

    double pole = poleTrojkata(AB, AC, katA);
    cout << "Pole trojkata wynosi: " << pole << "\n";

    return 0;
}

Efekt wykonania kodu programu:


Podaj długość boku AB: 3
Podaj długość boku AC: 4
Podaj miarę kąta A w stopniach: 60
Pole trójkąta wynosi: 5.20