Oppure

Loading
12/06/11 11:15
anomalo
Salve ho scritto il seguente codice che considera come oggetto un segmento e calcola in punti di intersezione con un altro segmento
class Segment
  def initialize(xi,yi,xf,yf)
    @xi=xi.to_i
    @yi=yi.to_i
    @xf=xf.to_i
    @yf=yf.to_i
  end
    #definisco metodo che calcola punti di intersezione tra due segmenti
    def intersection_point(xi2,yi2,xf2,yf2)
      if  @xi<=@xf
      rangex = (@xi..@xf)
      else
      rangex=(@xf..@xi)
      end
      array_x=rangex.to_a
      #------------------
      if @yi<=@yf
        rangey=(@yi..@yf)
      else
        rangey=(@yf..@yi)
      end
      array_y=rangey.to_a
      #------------------
      #------------------
       if  xi2<=xf2
      rangex2 = (xi2..xf2)
      else
      rangex2=(xf2..xi2)
      end
      array_x2=rangex2.to_a
      #------------------
      if yi2<=yf2
        rangey2=(yi2..yf2)
      else
        rangey2=(yf2..yi2)
      end
      array_y2=rangey2.to_a

      #------------------
      #----------
     
      array_x.each do |elementx1|
      array_x2.each do |elementx2|
      array_y.each do |elementy1|
      array_y2.each do |elementy2|
        if
        elementx1 == elementx2 and elementy1== elementy2
          return "cordinate punto di intersezione = #{elementx1},#{elementy1}"
        else
          return "i due segmenti non hanno punti di intersezione"
        end

      end
      end
      end
      end


     
    end
end
ab=Segment.new(2,2,6,2)
puts ab.intersection_point(3,0,3,8)

tuttavia non riesce a calcolare il punto e mi dice sempre che non ci sono punti di intersezione nonostante questa parte di codice estrapolato giri bene
array_x=[2,3,4,5,6]
array_y =[2]
array_x2= [3]
array_y2= [0,1,2,3,4,5,6,7,8]
      array_x.each do |elementx1|
      array_x2.each do |elementx2|
      array_y.each do |elementy1|
      array_y2.each do |elementy2|

        if
        elementx1 == elementx2 and elementy1== elementy2
        puts elementx1,elementy1
        end

Ho fatto un pò di prove e nel primo codice che ho postato quando faccio il ciclo each lui non mi considera tutti gli elementi dell'array ma solo il primo sapreste spiegarmi il motivo?
grazie a tutti
aaa
12/06/11 19:51
Poggi Marco
Ciao!

Ho letto il tuo script, e ho notato un' imprecisione nel modo in cui hai implementato i cicli di ricerca.
Infatti, con il costrutto if else, al primo ciclo, la funzione termina.

Di conseguenza, l' istruzione
return "i due segmenti non hanno punti di intersezione"

va portata fuori dai cicli di ricerca.

Un altro limite del programma, è che trova l' intersezione del segmento solo nel caso in cui essa abbia coordinate intere.
aaa