Referenziare

Buon giorno a tutti,
mi chiamo Stefano e da alcuni giorni mi sono avvicinato a Ruby.
Vi scrivo per sapere se qualcuno ha un’idea di come risolvere un
problema in Ruby.
Problema:
supponiamo di avere un grafico dove è rappresentato un diagramma con la
sua relativa scala, il problema è come referenziarlo per poter sapere il
valore x, y della posizione del cursore.
Lo scopo di questo programma è calcolare i momenti su di una superficie
piana di una data dimensione sapendo la posizione (x, y) e il peso (w).

C’è qualcuno in grado di darmi un’idea su come procedere?

Grazie anticipatamente e complimenti per il sito.

Stefano F.

Dipende. La soluzione migliore imho è di nascondere la reale
implementazione tramite un oggetto. Es.

class GraficoMomenti

  def ref(x,y)
  ...
  end

  def setref(x,y,val)
  ...
  end

  def momento(x,y,w)
  ...
  end

end

Così il programma usa la classe grafico in maniera trasparente e tu
puoi usare come indici ciò che preferisci (float, un oggetto tipo
Point, etc.).

I dati invece potresti memorizzarli in un hash (caso di tanti dati ma
sparsi sul grafico), in un array (la tua griglia è praticamente
piena), oppure il risultato di una funzione se questi seguono una
distribuzione continua. Potresti in tal caso anche fare in modo che il
metodo #momento o #[] sia memoized se hai una griglia piena/continua
ma accedi a pochi elementi o a sempre gli stessi. Insomma si cerca di
evitare di costruire array 1000x1000 e calcolare per ogni cella un
valore.

Ad esempio usando come implementazione un array (griglia piena, indici
interi) e come interfaccia [] e []= puoi fare (untested code):

class GraficoMomenti

def initialize
@arr = Array.new
end

def
@arr[x][y]
end

def []=(x,y,val)
unless @arr[x]
@arr[x] = Array.new
end

@arr[x][y]=val

end

end

a = GraficoMomenti.new
a[1,2]=5
puts a[1,2]

oppure con un Hash

class GraficoMomenti

def initialize
@hash = Hash.new
end

def
@hash[[x,y]]
end

def []=(x,y,val)
@hash[[x,y]]=val
end

end

a = GraficoMomenti.new
a[1,2]=5
puts a[1,2]

oppure supponendo che la tua griglia sia continua con una funzione
memoized

require ‘memoize’

class GraficoMomenti

include Memoize

def fun(x,y)
x^y
end

def
@arr[x][y]
end

@cache = memoize(:[])

def []=(x,y,val)

manipoliamo la cache di memoize

@cache[[[x,y]]] = val
end

end

a = GraficoMomenti.new
a[1,2]=5
puts a[1,2]

Scusa, ma non ho capito bene: stai parlando di un’applicazione
desktop? GTK? WxWidgets? Cocoa? O web? Quando dici “cursore” intendi
il puntatore del mouse, giusto?
Stefano F. wrote:

Buon giorno a tutti,
mi chiamo Stefano e da alcuni giorni mi sono avvicinato a Ruby.
Vi scrivo per sapere se qualcuno ha un’idea di come risolvere un
problema in Ruby.
Problema:
supponiamo di avere un grafico dove è rappresentato un diagramma con la
sua relativa scala, il problema è come referenziarlo per poter sapere il
valore x, y della posizione del cursore.
Lo scopo di questo programma è calcolare i momenti su di una superficie
piana di una data dimensione sapendo la posizione (x, y) e il peso (w).

C’è qualcuno in grado di darmi un’idea su come procedere?

Grazie anticipatamente e complimenti per il sito.

Stefano F.

_______________________________________________________________________

Ml mailing list
[1][email protected]
[2]http://lists.ruby-it.org/mailman/listinfo/ml


“The really rich people figure out how to dodge taxes anyway.” – George
W. Bus
h, explaining why high taxes on the rich are a failed strategy,
Annandale, Va.,
Aug. 9, 2004

References

  1. mailto:[email protected]
  2. http://lists.ruby-it.org/mailman/listinfo/ml

Stefano F. wrote:

Buon giorno a tutti,
mi chiamo Stefano e da alcuni giorni mi sono avvicinato a Ruby.
Vi scrivo per sapere se qualcuno ha un’idea di come risolvere un
problema in Ruby.
Problema:
supponiamo di avere un grafico dove è rappresentato un diagramma con la
sua relativa scala, il problema è come referenziarlo per poter sapere il
valore x, y della posizione del cursore.
Lo scopo di questo programma è calcolare i momenti su di una superficie
piana di una data dimensione sapendo la posizione (x, y) e il peso (w).

C’è qualcuno in grado di darmi un’idea su come procedere?

Grazie anticipatamente e complimenti per il sito.

Stefano F.

Grazie a tutti per la pronta risposta, ora cerco come mettere in pratica
i vs. consigli.

Stefano

Stefano, ti serve una cosa via web o standalone sul desktop? l’approccio
cambia molto.