• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjmowanie najbliższego kąta z tablicy

Object Storage Arubacloud
0 głosów
143 wizyt
pytanie zadane 22 sierpnia 2022 w JavaScript przez Maxxxii Obywatel (1,260 p.)
Hej,

Jakiś czas temu pytałem Was o wyjmowanie najbliższej liczby do szukanej z tablicy. I to zdało egzamin. Dziś przychodzę z wyjmowaniem kąta. Tutaj niestety nie mogę posłużyć się tym o co prosiłem wcześniej, ponieważ kiedy mamy na przykład tablice z kątami 230, 120, 340, a szukany kąt to 020 to poprzedni kod oczywiście wyjmie nam 120, a poprawne jest 340. W jaki sposób można to rozwiązać?

Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 22 sierpnia 2022 przez Wiciorny Ekspert (269,710 p.)
Kieruj się wartością bezwzględną różnicy z 0, zauważ, że suma kątów to 360 więc trzeba by nie co zmodyfikowac algorytm i uwzględniać wartość bezwzględną np przy 20-360 = | -340 | da i tak 340 . Wiec nalezalo by sprawdzic wszystkie przypadki i utrzymywać aktualnie ostatni "wybrany jako ten kandydat" do momentu kiedy znajdziesz drugiego kandydata.

Finding closest angel - https://www.anycodings.com/1questions/158107/find-out-which-triangle-is-closest-to-equilateral-triangle-fastestsimplest-way
temat mozesz prześledzić tutaj z opisem algorytmu
komentarz 22 sierpnia 2022 przez Maxxxii Obywatel (1,260 p.)
nie do końca ogarniam powiem szczerze :D nie wiem czy to, że akurat w tym przypadku 340 + 20 nie było przypadkiem. Uściślę tylko, że nie ma to nic wspólnego z trójkątem, a zwykłymi losowymi można powiedzieć kątami i losowym kątem "szukanym". Mogę podać inny przykład typu tablica z kątami 40, 70, 100, 190, 140, 280 a liczba do której szukamy najbliższej to 350
1
komentarz 22 sierpnia 2022 przez Wiciorny Ekspert (269,710 p.)
W tym wypadku weźmiesz najbardziej skrajny kąt tablicy 40 i najbliższy liczbie ... czyli 190 i tutaj różnica między nimi bedąca wartością względną da Ci odpowiedź mianowicie różnica
350-190 = 160 stopni natomiast 40-350= |  -310 | = 310 więc jest stanowczo większa niż poprzednio stąd 40 jest znacznie bliżej
1
komentarz 23 sierpnia 2022 przez Oscar Nałogowiec (29,290 p.)
Po prostu trzeba liczyć modulo 360.
0 głosów
odpowiedź 22 sierpnia 2022 przez Great Stary wyjadacz (12,360 p.)

Dla dwóch liczb porównuje się odległość między nimi. Dla kątów trzeba również sprawdzić czy odległość w drugim kierunku jest mniejsza. 

| 230  - 20 | = 210
360 - 230 + 20 = 150
 

| 120 - 20 | = 100
| 360  - 120 + 20| = 260

| 340 - 20 | = 320
360 - 340 + 20   = 40 <-- mniejsza odległość

Przykładowy kod:

#include <iostream>
#include <cmath>
#include <vector>
#include <functional>
#include <algorithm>

int angle_distance(int angle1, int angle2) {
    if (angle1 < angle2)
        std::swap(angle1, angle2);
    return std::min(
        angle1 - angle2,
        360 - angle1 + angle2
    );
}

int main() {
    std::vector<int> angles{ 230, 120, 340 };
    int angle = 20;
    auto near = *std::ranges::min_element(angles, {},
        std::bind(angle_distance, std::placeholders::_1, angle));
    std::cout << "Near angle: " << near << "\n";
}

Podobne pytania

+1 głos
2 odpowiedzi 331 wizyt
0 głosów
2 odpowiedzi 212 wizyt
pytanie zadane 12 kwietnia 2022 w C i C++ przez xTMx3 Obywatel (1,560 p.)
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 3 kwietnia 2019 w C i C++ przez mr.wo!tman Nowicjusz (120 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...