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

Losowy punkt wewnątrz trójkąta

VPS Starter Arubacloud
0 głosów
412 wizyt
pytanie zadane 30 czerwca 2019 w Inne języki przez Davidelo18 Użytkownik (660 p.)

Cześć :D Muszę stworzyć w scilab`ie algorytm, który zasymuluje błądzenie przypadkowe wewnątrz trójkąta. Proces tego algorytmu wygląda tak:

1. Wystartuj z dowolnego punktu początkowego wewnątrz trójkąta.

2. Wybierz losowo jeden z 3 wierzchołków trójkąta

3. Nowy punkt znajduje się w połowie drogi między bieżącym punktem a wybranym wierzchołkiem.

4. Kroki 2-3 powtórz N razy (np. 100 razy)

 

Nie za bardzo wiem jak się za to zabrać. Jak zdefiniować zmienne? Na pewno potrzebne będą mi punkty wierzchołkowe tylko jak je zapisać?

komentarz 30 czerwca 2019 przez tkz Nałogowiec (42,000 p.)

https://www.scilab.org/sites/default/files/Scilab_beginners_0.pdf 

czytaj, korzystaj z googla, po prostu szukaj 

komentarz 30 czerwca 2019 przez Davidelo18 Użytkownik (660 p.)
Przeszukałem dzisiaj 2 strony google, ile to postów na stacku przeczytałem to aż nie policzę. Już szukam w jakimkolwiek języku, może uda się przerobić :D
komentarz 30 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
Wszystko co jest Ci potrzebne jest w tym linku.

2 odpowiedzi

+1 głos
odpowiedź 30 czerwca 2019 przez DeBos123 Nałogowiec (44,950 p.)
wybrane 1 lipca 2019 przez Davidelo18
 
Najlepsza

Nie piszę w scilab'ie, ale podam ci przykład w JS'ie, więc przynajmniej będziesz wiedział jak teoretycznie zapisać sam algorytm.

Jak zdefiniować zmienne?

var vertices={A:{x:15,y:15},B:{x:23,y:30},C:{x:50,y:25}};

1. Wystartuj z dowolnego punktu początkowego wewnątrz trójkąta.

var r1=Math.random();
var r2=Math.random();
var randomPointX=(1-Math.sqrt(r1))*vertices.A.x+(Math.sqrt(r1)*(1-r2))*vertices.B.x+(Math.sqrt(r1)*r2)*vertices.C.x;
var randomPointY=(1-Math.sqrt(r1))*vertices.A.y+(Math.sqrt(r1)*(1-r2))*vertices.B.y+(Math.sqrt(r1)*r2)*vertices.C.y;
var randomPoint={x:randomPointX,y:randomPointY};

2. Wybierz losowo jeden z 3 wierzchołków trójkąta

var vertice=vertices[Object.keys(vertices)[Math.floor(Math.random()*Object.keys(vertices).length)]];

3. Nowy punkt znajduje się w połowie drogi między bieżącym punktem a wybranym wierzchołkiem.

var newPoint={x:(randomPoint.x+vertice.x)/2,y:(randomPoint.y+vertice.y)/2}

4. Kroki 2-3 powtórz N razy (np. 100 razy)

To co trzeba zamykasz w pętli i kod wygląda mniej więcej tak:

var N=Math.floor(Math.random()*100);
var vertices={A:{x:15,y:15},B:{x:23,y:30},C:{x:50,y:25}};
for(var i=0;i<N;i++){
    var r1=Math.random();
    var r2=Math.random();
    var randomPointX=(1-Math.sqrt(r1))*vertices.A.x+(Math.sqrt(r1)*(1-r2))*vertices.B.x+(Math.sqrt(r1)*r2)*vertices.C.x;
    var randomPointY=(1-Math.sqrt(r1))*vertices.A.y+(Math.sqrt(r1)*(1-r2))*vertices.B.y+(Math.sqrt(r1)*r2)*vertices.C.y;
    var randomPoint={x:randomPointX,y:randomPointY};
    var vertice=vertices[Object.keys(vertices)[Math.floor(Math.random()*Object.keys(vertices).length)]];
    var newPoint={x:(randomPoint.x+vertice.x)/2,y:(randomPoint.y+vertice.y)/2}
}
komentarz 30 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
Kompletnie nie przydatne, zważając na to, że scilab nie ma nawet w 1% podobnej składni
komentarz 30 czerwca 2019 przez DeBos123 Nałogowiec (44,950 p.)
Chodzi o samą logikę programu i wzory.
komentarz 30 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
Lepszy był by pseudokod, niż to. A co jak autor nie zna js?
1
komentarz 30 czerwca 2019 przez DeBos123 Nałogowiec (44,950 p.)
JS'a wybrałem dlatego, że autor w ulubionych technologiach ma go właśnie podanego, więc obstawiam, że trochę jednak umie.
2
komentarz 30 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
Mniejsza z resztą, byle pomogło
komentarz 1 lipca 2019 przez Davidelo18 Użytkownik (660 p.)

@DeBos123

Bardzo dziękuję, chodziło mi nawet o samą logikę. JS`a tak trochę umiem, właśnie zacząłem staż front-endowy więc coś tam wiem xD Pomogło oczywiście, bo chodziło mi tylko o to że nie mogłem ogarnąć logiki, ani algorytmu na to. Dzięki :D

+1 głos
odpowiedź 1 lipca 2019 przez mrspock1 Mądrala (6,420 p.)
To jest dosyć proste zadanie z geometrii analitycznej i system programowania ma obsługiwać jedynie podstawowe operacje arytmetyczne.

1.Ustalasz równanie prostej dla dwóch dowolnych wierzchołków trójkąta.

2. Mając to równanie prostej znajdujesz dowolny punkt na tej prostej leżący między tymi wierzchołkami

3. Korzystając z obliczonych współrzędnych tego punktu oraz współrzędnych trzeciego wierzchołka trójkąta tworzysz równanie prostej pomocniczej

4. Podobnie jak poprzednio znajdujesz punkt leżący między punktami skrajnymi na prostej pomocniczej. Ten punkt będzie leżał na pewno wewnątrz trójkąta.

5. Mając punkt na prostej pomocniczej wewnątrz trójkąta, drugi punkt jako trzeci wierzchołek trójkąta i już obliczony wzór prostej pomocniczej, bez trudu znajdziesz punkt leżący w środku odcinka między tymi dwoma punktami. Potem tylko trzeba powtórzyć operację wielokrotnie za każdym razem przesuwając punkt w środku trójkąta

Podobne pytania

0 głosów
0 odpowiedzi 467 wizyt
0 głosów
2 odpowiedzi 3,701 wizyt
pytanie zadane 4 grudnia 2016 w C# przez Imerators Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 384 wizyt
pytanie zadane 27 stycznia 2019 w Inne języki przez oraju567 Nowicjusz (160 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...