print "Najprv zadaj pohybovy vektor x,y: "; pohyb = readline.split(",").map{|c| c.to_i} pohyb_n = [pohyb[1], -pohyb[0]] najmensia = nil; najvacsia = nil raketa_dole = nil; raketa_hore = nil print "Kolko vrcholov ma raketa? "; n = readline.to_i n.times do print "Zadaj vrchol rakety x,y: "; bod = readline.split(",").map{|c| c.to_i} priamka_c = -(bod[0]*pohyb_n[0] + bod[1]*pohyb_n[1]) if not najmensia or priamka_c < najmensia najmensia = priamka_c raketa_dole = bod end if not najvacsia or priamka_c > najvacsia najvacsia = priamka_c raketa_hore = bod end end nejaky_dole = nil; nejaky_hore = nil; nejaky_medzi = nil print "Kolko vrcholov ma asteroid? "; n = readline.to_i n.times do print "Zadaj vrchol asteroidu x,y: "; bod = readline.split(",").map{|c| c.to_i} je_dole = (pohyb_n[0]*bod[0] + pohyb_n[1]*bod[1] + najmensia) > 0 je_hore = (pohyb_n[0]*bod[0] + pohyb_n[1]*bod[1] + najvacsia) < 0 nejaky_dole = bod if je_dole nejaky_hore = bod if je_hore nejaky_medzi = bod if not je_dole and not je_hore end if not nejaky_medzi # je strana 'medzi' aj nejaka krajna strana prazdna? to by znamenalo ze urcite nenarazi if not nejaky_hore or not nejaky_dole puts "Uff, to bolo tesne!"; exit end # musime najst nejaky bod medzi (nemusi to byt vrchol) # najdeme priesecnik priamkok 'nejaky_hore-nejaky_dole' a 'najmensia' medzi_n = [nejaky_hore[1]-nejaky_dole[1], nejaky_dole[0]-nejaky_hore[0]] medzi_c = -(nejaky_hore[0]*medzi_n[0] + nejaky_hore[1]*medzi_n[1]) medzi_x = ((-najmensia)*medzi_n[1]-pohyb_n[1]*(-medzi_c)) / (pohyb_n[0]*medzi_n[1]-pohyb_n[1]*medzi_n[0]) medzi_y = ((-najmensia)*medzi_n[0]-pohyb_n[0]*(-medzi_c)) / (pohyb_n[0]*medzi_n[1]-pohyb_n[1]*medzi_n[0]) nejaky_medzi = [medzi_x, medzi_y] end # teraz porovnam ze na ktorej strane od raketovej priamky je ten nejaky_medzi raketa_n = [raketa_hore[1]-raketa_dole[1], raketa_dole[0]-raketa_hore[0]] raketa_c = -(raketa_hore[0]*raketa_n[0] + raketa_hore[1]+raketa_n[1]) # zistime ktorym smerom sa raketa hybe - ci do >0 alebo do <0 smer_rakety = (raketa_n[0]*pohyb[0] + raketa_n[1]*pohyb[1]) <=> 0 # zistime na ktorej strane je bod 'nejaky_medzi' strana_nejakeho_medzi = (raketa_n[0]*nejaky_medzi[0] + raketa_n[1]*nejaky_medzi[1] + raketa_c) <=> 0 # raketa narazi prave vtedy ked smeruje na stranu kde sa nachadza nejaky_medzi puts(smer_rakety == strana_nejakeho_medzi ? "Je to hotova samovrazda!" : "Uff, to bolo tesne!")