Newsgroup: it.comp.lang.javascript
Titolo: Matrici bidimensionali javascript

Ciao ragazzi,
scusate la domanda, ma volevo sapere come fare a creare e a gestire una
matrice bidimensionale usando javaascript....
su 
ww.html.it
 ho letto che le matrici bidimensionali non sono contemplate in
javascript, ma si possono ricreare creando delle matrici multiple.
Io ho fatto cosi.
var diapos = 0
var indpos = 0
var diabig = new Array(Nome(), Larg(), Alt())
while (diapos < 1)
{
diabig[].src='../immagini/progetti/civili/grandi/rccs_particolare.jpg'
diabig[1][2].width='373'
diabig[1][3].height='380'
}
function openwin(imgName,ind)
{
 var ind;
      var StatusOff = "toolbar=no, location=no,
directories=no,status=no,menubar=no,scrollbars=no,resaizable=no";
    var DimW = ",width=" +  diabig[ind][2].width;
      var DimH = ",height=" +  img[ind][3].height;
     var StatusWin = StatusOff + DimW + DimH;
   var Dettaglio = open(imgName,"Particolare",StatusWin);
}
Pero dopo aver creato il vettore contenente gli altri tre vettori, non so
come fare a gestirli.
Qualcuno ha qualche suggerimetno?
Grazie
Emanuele

 Non fai prima a dire qual'e` il problema?
mi scuso per aver dimenticato un pezzo di codice....
var Nome = new Array()
var Larg = new Array()
var Alt = New Array()
diabig[]......voleva solo indicare che non sapevo come fare a puntare al
primo vettore....
Comunque, il mio problema e' questo.
Come si vede dalla funzione, voglio aprire una finestra a parte usanto il
comando OPEN, passandogli una immagine come nome finestra, e voglio che le
dimensioni dell'immagine siano calzanti alla perfezione con l'immagine
richiesta, questo per evitare barre di scorrimento.
Es...
Ho un'icona che visualizza un oggetto...100x100 pixel
Clicco sull'immagine e si apre la finestra grande di 400x300 pixel
Siccome ho molte foto, non posso fare molte pagine ogniuna con la sua foto,
altrimenti mi ci vuole un HD intero solo per le pagine ....quindi voglio
fare un'unica funzione che apra una finestra con misure dinamiche.
E' possibile?
Grazie
Emanuele

 Qualcuno ha qualche suggerimetno?
Devi creare "array di array". Ovvero:
var mymatrix=new Array(10); /* un array di 10 elementi */
for (var i=0;i<mymatrix.length;i++){
	/* ogni elemento dell'array e' a sua volta un altro array di 5 elementi */
	mymatrix[i]=new Array(5); 
}
Cosi' ottieni una rappresentazione di una matrice di 10x5.
Nel tuo caso, quindi, presupponendo che le tre funzioni restituiscano
valori numerici, dovresti fare qualcosa del tipo:
var diabig = new Array(Nome());
for (var i=0;i<diabig.length;i++){
	diabig[i]=new Array(Larg());
	for (var j=0;i<diabig[i].length;j++)
		diabig[i][j]=new Array(Alt());
}
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Tutti quelli che credono nella psicocinesi, per favore alzino la mia mano.

 fare un'unica funzione che apra una finestra con misure dinamiche.
E in tutto questo l'array che senso ha?
Se gia' popoli un array con tutte le dimensioni delle varie immagini (che
e' quel che m'e' parso di capire tu vorresti fare), non fai prima a fare
direttamente nel link:
window.open('paginafoto.htm?myphoto.jpg','',width=400,height=200');
?
Tra l'altro, ti converebbe mantenere una proporzione tra la miniatura e
l'immagine ingrandita, risparmieresti un sacco di codice.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)


La presenza del vettore con dentro i dati larghezza e altezza dell'immagine,
nella mia mente contorta mi serviva per non dovre creare troppo pagine
ogniuna contenente una singola immagine...
A ogni click fatto su una singola immagine, invio alla funzione il nome
epercorso dell'immaigne e un numero di riferimento...la funzione visualizza
l'immagine corretta a seconda del numero che gli ho passato.
Purtroppo non posso mantenere sempre proporzionalita fra le due immagini,
dato che alcuen sono foto molto grandi che se rimpicciolite non avrebbero
senso.
Tu dici che passando richiamando questa pagina cosi come l'hai scritta,
viene visualizzata l'immagine con le dimensioni a mio piacere? Se fosse cosi
lo inserirei direttamente nell'evento onClick....saltando tute le funzioni
 window.open('paginafoto.htm?myphoto.jpg','',width=400,height=200');
Grazie

  window.open('paginafoto.htm?myphoto.jpg','',width=400,height=200');
No, intendo dire che in questo modo ti apre una pagina che devi fare tu
(paginafoto.htm) passando nella querystring il nome della foto da
visualizzare, aprendo la finestra a 400x200 pixel.
Ovviamente nella pagina "paginafoto.htm" devi scrivere del codice js che ti
recupera il nome della foto dalla querystring.
Basta qualcosa del tipo:
<script type="text/javascript">
	var photofilename=window.location.search.substring(1);
</script>
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Alcune persone sono ancora vive per il semplice motivo che e' 
illegale ucciderle.

 illegale ucciderle.
( spero che non sia il mio caso.....)
Grazie
Emanuele

mi ci metto anch'io.
recentemento ho affrontato lo stesso problema e l'ho risolto cosě:
var matrice=[[[]]];
ecco fatto una matrice 3*3; per chiamare l'elemento (a, b, c):
matrice[a][b][c]
(ovviamente č da riempire, la riga sopra sopra mi restituirebbe undefined)
ciaoCiao
Enrico

 ( spero che non sia il mio caso.....)
lol, no, non preoccuparti. :) Sono signature random. ^_^
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno 
fumato una sigaretta.

non ho seguito tutto, ma volevo segnalare la facilità di creazione della
matrice con la notazione che ho detto nel post precedente...
forse dovevo dare una letta...
Sorry
Enrico

 ecco fatto una matrice 3*3; per chiamare l'elemento (a, b, c):
Mhm.. No, non mi quadra.
Se io scrivo:
var mymatrix=[[[]]];
Ho creato alla fin fine, un solo elemento, che posso referenziare tramite:
mymatrix[0][0][0]="myvalue";
Non e' una matrice 3x3 (tra l'altro in quel caso avrebbe due dimensioni,
non tre).
Forse mi sfugge qualcosa, o intendevi dire qualcosa di diverso..?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

 matrice con la notazione che ho detto nel post precedente...
Smettiamola di chiamarle "matrici" che poi la gente fa confusione :) In JS
non esistono matrici, ma solo array. Si possono avere vettori
multidimensionali usando array di array.
Per quanto riguarda la notazione, e' semplicemente un modo come un altro
per definire un oggetto array, "array literal".. Ma dato che l'utente in
questione non la conosceva, non volevo mettere troppa carne al fuoco, e
cercare di capire il suo problema partendo dagli assunti che gia'
conosceva.
Personalmente, anche io uso unicamente [] per la creazione di array, ma e'
del tutto equivalente a scrivere "new Array()" in quanto, alla fin fine, la
notazione "array literal" altro non e' che un "object initializer";
equivalente anch'esso allo scrivere "new Object()".
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Tutti quelli che credono nella psicocinesi, per favore alzino la mia mano.

 non tre).
non ho capito il riferimento alle due dimensioni... spiegami meglio.
ciaoCiao
Enrico

 equivalente anch'esso allo scrivere "new Object()".
Ti confermi davvero un grande!
ciao
Enrico

Piuttosto che lavorare per vettori e fare casino tra indici primari e
secondari, ragiona per oggetti (checché se ne dica, javascript è un
linguaggio a oggetti)
1) definisci l'oggetto (con i parametri di default)
function Immagine()
{
    this.thumbFile="";
    this.thumbWidth=0;
    this.thumbHeight=0;
    this.file="";
    this.width=0;
    this.height=0;
}
2) crei un array
var diapositive = new Array();
3) ogni volta che aggiungi una immagine all'array fai qualcosa del tipo:
i=diapositive.length;
diapositive[i]=new Immagine();
with diapositive[i]
    {
        thumbFile="\images\dia001_tn.jpg";
        thumbWidth=100;
        thumbHeight=100;
        file="\images\dia001.jpg";
        width=350;
        height=210;
    }
Un uso artificioso di cicli while e for ti permetterà di compattare il
codice ed aumentare gli automatismi.
Alex.
-- 
___________________________________________________________
a p bertolini
(
www.webwarrior.org
)

nel tuo post mi č piaciuto molto ritrovare un'approccio ad oggetti.
l'ho utilizzato anch'io con profitto diverse volte
il bello dei ng č proprio le conferme che vi troviamo
ciaoCiao
Enrico

 non ho capito il riferimento alle due dimensioni... spiegami meglio.
Se dico che ho una matrice 3x3, significa che ho una matrice a due
dimensioni, la cui prima dimensione ha 3 elementi e la seconda pure.
Immaginati una tabella, con quattro righe e due colonne. E' una matrice
4x2. Se invece ho una griglia a tre dimensioni (pensa ad uno spazio
tridimensionale, con x,y,z come dimensioni) diventa 4x2x10 (presupponendo
che la terza dimensione abbia 10 elementi).
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)

         file="\images\dia001.jpg";
Eh, i danni che la Microsoft ha fatto su tonnellate di utenti e di
sviluppatori, saranno duri da rimediare..
Lo standard per le path su web (e non solo) e' la slash non la backslash:
thumbFile="/images/dia001_tn.jpg";
Inoltre, se proprio devi usare la backslash, devi ricordarti di
"raddoppiarla" in JS, dato che e' il carattere usato per l'escape:
thumbFile="\\images\\dia001_tn.jpg";
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Non esistono donne brutte. Dipende solo da quanta vodka bevi.
(proverbio russo)

[cut]
Non conosco la programmazione ad oggetti (e anche se ci ho provato molte
volte a utilizzarla, non riesco a vederne un fine pratico per il mio campo)
ma ne sono MOLTO interessato....
Avresti voglia di spiegare a un povero vecchio programmatore stordito
qualcosa di piu' sulla programmazione a oggetti?
Vorrei capirci qualcosa, ma da solo non riesco a vederne delle applicazioni
pratiche per il mio uso.
Te ne sono grato.
Emanuele

[cut]
Ragazzi, non mi sgridate, ma ho trovato una soluzione semplice semplice al
mio stupido problema....
Mi sono accorto che la mi afunzione (quella dove creo la finestra) riceve un
parametro, il path dell'immagine...
ma allora perche non passargli anche la width e la heigth cosi risolvo il
problema...
Sono spiacente di avervi fatto scervellare, ma cosi ho avuto anche modo di
imparare qualcosa di nuovo...spero (di averlo imparato ovvio)
Grazie
Emanuele

 pratiche per il mio uso.
Ti diro', la programmazione ad oggetti, per molti versi, e' piu' facile
della programmazione strutturata, in quanto piu' "attinente" alla realta'
che ci circonda. Quindi e' anche piu' adatta a risolvere, spesso, certe
problematiche.
Soprattutto, la programmazione ad oggetti e' utile per scrivere codice
facilmente manutenibile, riusabile, e comprensibile.
Potrei stare qui a ragionare di OOP per ore, ma credo che la cosa migliore
sia che tu ti faccia un'idea prima, leggendo sia la documentazione che ti
ho indicato, sia magari qualche tutorial su internet (come si suol dire,
google e' tuo amico).
Se poi hai bisogno di chiarimenti, basta che tu scriva il tuo dubbio sul NG
e ti sara' risposto. :)
Giusto per darti una "piccola spinta":
Un "oggetto" e' un entita' composta da metodi e proprieta'.
Le proprieta', le puoi considerare come gli i "dati" legati a tale oggetto,
"gli attributi". Ad esempio, un oggetto "persona" potrebbe avere come
proprieta' (attributi) il nome, il colore dei capelli, il colore degli
occhi, l'altezza, peso, etc. Le cose che puoi trovare anche sulla carta
d'identita' insomma.
I metodi, invece, sono le "azioni" che l'oggetto puo' compiere. Sono cio'
che determinano "i comportamenti" dell'oggetto. Senza i metodi, un oggetto
sarebbe solo una lista di dati, esattamente come una vecchia struttura del
C.
In un oggetto "persona" i metodi potrebbero essere "dormi()","svegliati()",
e cosi' via.
I metodi, in quanto funzioni, possono anche ricevere parametri e quindi
potresti avere metodi piu' complessi, che agiscono in base a valori
esterni. Tipo "parlaCon()", "camminaVerso()", etc.
Ovviamente i metodi possono (anzi, spesso) funzionare in base agli
attributi dell'oggetto a cui si riferiscono, diversi oggetti dello stesso
tipo (in altri linguaggi che non siano JS -almeno fino alla vers.2 - si
direbbe "della stessa classe"), possono avere attributi diversi, e
risultati diversi se si esegue lo stesso metodo.
Per essere piu' chiaro, due persone possono compiere la stessa azione, ad
esempio saltare. Ma dipendentemente da quanta forza hanno nei muscoli delle
gambe, da quanto slancio , e da quanto peso hanno,avranno due risultati
diversi.
Adesso ti consiglio di immergerti in qualche lettura sulla OOP, assimilare
tutto cio' che puoi, smanettarci, e dopo risentirci per verificare quali
sono stati i risultati.
Considera che se sviluppi in Javascript per il web, stai gia' sviluppando
ad oggetti anche senza rendertene conto.
In quanto esiste l'oggetto "window", che usi quando fai un alert, un open,
e cosi' via. C'e' l'oggetto "document", che e' "figlio" dell'oggetto
"window".. entrambi hanno metodi e proprieta' che ne definiscono la natura.
Quindi, quando tu fai in Javascript una "classica" funzione "strutturata":
function myfunction(){
	alert("this is my function!");
}
myfunction();
in realta' stai gia' programmando ad oggetti.
Altro non hai fatto che definire un nuovo "metodo" per l'oggetto" window
("window.myfunction()" ) che a sua volta chiama un altro metodo di tale
oggetto, ovvero "window.alert()".
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
La vita e' una tempesta, ma prenderla nel culo e' un lampo.
(B. Grillo)

[cut]
Grazie...andro subito a informarmi e cerchereo tutti i testi sulla OOP che
riesco a trovare, sia in interent che nei miei libri...
Grazie
EManuele