• 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

Object Storage Arubacloud
0 głosów
416 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 468 wizyt
0 głosów
2 odpowiedzi 3,729 wizyt
pytanie zadane 4 grudnia 2016 w C# przez Imerators Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 392 wizyt
pytanie zadane 27 stycznia 2019 w Inne języki przez oraju567 Nowicjusz (160 p.)

92,550 zapytań

141,392 odpowiedzi

319,520 komentarzy

61,935 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!

...