Rapporto Scalare Dimensioni

si esatto era una mia ipotesi, essendo che se vedi come prima soluzione anche io avevo proposto una molto semplice dove partendo da una grandezza le successive erano tutte la metà di quella precedente.

poi avevo pensato ad una situazione simile: in pratica per una perete con una determinata altezza
partendo con un mettone scelto con una determinata misura per finire con un’altra misura specifica
quanti mattoni ci vorrebbero per riempire il resto della parete ridimensionandoli tra il primo e ultimo

in effetti credo che ciò che avevo pensato sia più contorta come soluzione da trovare.
pensandoci bene (magari mi sbaglio) per ottenere un perfetto incastro tra il primo e ultimo mattone
in una determinata altezza, forse bisognerebbe avere tutti mattoni con misure a scalare multipli del primo?

Questa definizione dovrebbe rispondere al tuo quesito.
quadrati b.gh (18,5 KB)

:thinking: :thinking: :thinking:

o aumentare la confusione :blush:

forse intendi la curva che hai creato spostando i punti sull’asse X hanno un significato particolare?

(ua proporzione anche loro)

In effetti la curva ricavata così non ha molto senso.
Rivedendola penso che anche questa mia definizione non abbia molto senso.

ciao Leopoldo,

https://it.wikibooks.org/wiki/Implementazioni_di_algoritmi/Algoritmo_di_Euclide

mi stavo chiedendo se con l’Algoritmo di Euclide potrebbe risolvere il problema, di non ritrovarmi con il rettangolo finale più piccolo e non coerente con la dimensione del rapporto scalare?

ho provato con il comando che mi hai suggerito _Polygon
ma forse per funzionare algoritmo ha bisogno di numeri interi. . .

magari sto provando con dimensioni aventi decimali si potrebbe fare lo stesso algoritmo prima per i soli decimali, e poi sommare tale incremento al secondo calcolo quello dei valori interi
ovviamente solo per la parte da scalare sull’asse Y che dite è un ragionamento valido?

Come già visto in precedenza la difficoltà sta nel dover rispettare misure fisse.
Il problema è, come dici, nel penultimo rettangolo non coerente con l’ultimo.
Non ho idea di come poter utilizzare il MCD.
Avevo riprovato con questa definizione, ma poi il discorso si era interrotto.
quadrati d.gh (29,0 KB)

Ciao,

qui c’e’ il mio tentativo … piuttosto laborioso in effetti … :thinking:
( scusate lo stile ‘primitivo’ della def. :blush: :slight_smile: )

salvio-27.gh (28,0 KB)

grazie ragazzi per le def condivise, anche vedendole mi sfugge il ragionamento che avette fatto
per realizzarle. ho comparato l’altezza del primo quadrato col secondo e così via
ma non mi sembra trovare la relazione di scala che ci dovrebbe essere

sbaglio qualcosa?

Per quanto riguarda la mia def, e’ vero.
Ho cercato di variare gradualmente la differenza tra le altezze, non il loro rapporto.
Mio errore.

Va be’ … e’ stata una scusa per litigare un po’ con GH. :smile:

1 Mi Piace

:joy: :joy:

eeee me ne sono accorto, ti sei impegnato con le formule :wink:

avevo visto questo esempio sull’argoritmo di Euclide per trovare il MCD coi quadrati
(se ho inteso bene in pratica si deve avere i lati con lunghezza di valore intero)

basta creare dei quadrati con la stessa lunghezza dei lati
e per questo bisogna iniziare dal lato con lunghezza minore
alla fine ti ritrovi con il quadrato più piccolo possibile di tutti
mettendoli in serie riempiono completamente la grandezza

per questo avevo riaperto questo post, essendo che ho ipotizzato che tale algoritmo si potrebbe applicare benissimamente per la soluzione di questo problema.

per risolvere il problema delle lunghezze coi decimali avevo appunto pensato a questo:

il ragionamento che ho fatto è stato che anche i soli decimali
se presi singolarmente hanno lo stesso risultato dei numeri interi

se questo ragionamento è valido, si potrebbe quindi ritrovare il rapporto matematicamente

nel link che avevo postato c’era questa formula:

immagine

e io stavo lavorando su una cosa simile ma non riesco ad utilizzare il risultato:

a=24.960
b=39.911

print(a)
print(b)

aa=round(a-int(a),3)
bb=round(b-int(b),3)

print(aa)
print(bb)


def mcd(aa, bb):
  while bb:
    aa, bb = bb, aa%bb
  return aa
print(mcd(aa,bb))


def mcd(a, b):
  while b:
    a, b = b, a%b
  return a
print(mcd(a,b))

gli ultimi due valori quelli di interesse mi spiazzano:

4.440892098500626e-16
7.105427357601002e-15

Per non complicarsi la vita, c’è un componente Heteroptera che trova massimo comun divisore e minimo comune multiplo da numeri, ovviamente, interi.
Per Emilio, per la differenza relativa c’è un componente standard.
img1

1 Mi Piace

Grazie Leopoldo !
Buono a sapersi. :slightly_smiling_face:

Ho abbozzato una soluzione in rhinoscript. I valori di default sono quelli del post iniziale.
E’ giusto un punto di partenza. Il risultato grafico è molto scarno e riportato nell’origine
lungo l’asse X. Non gestisce gli errori ed inoltre ho fatto pochi test …

Sergio

'Script written by ing. Alessi Sergio
'Script copyrighted by ing. Alessi Sergio
'Script version giovedì 1 agosto 2024 12:17:03

Option Explicit

Sub EvalSum(V0, V1, L, N, S, f)
	f = (V1 / V0) ^ (1 / N)
	S = V0 * f
	Dim i
	For i=1 To N - 1
		S = f * (V0 + S)
	Next
	S = S + V0
End Sub

Call Main()
Sub Main()

	Dim V0, V1, L, f, f0, f1, N0, N1, N, i, S0, S1, S, E
	
	V0 = rhino.GetReal("Inserisci il valore massimo", 8.3, rhino.UnitAbsoluteTolerance())
	V1 = rhino.GetReal("Inserisci il valore minimo", 0.87, rhino.UnitAbsoluteTolerance(), V0)
	L = rhino.GetReal("Inserisci il valore totale", 61.173, (V0 + V1) * 1.5)
	
	N0 = Int((L - V0 - V1) / V0) + 2
	Call EvalSum(V0, V1, L, N0, S0, f0)

	N1 = Int((L - V0 - V1) / V1) + 2
	Call EvalSum(V0, V1, L, N1, S1, f1)

	N = N0 + int((N1 - N0) / 2)
	Call EvalSum(V0, V1, L, N, S, f)
	
	While N1 - N0 > 1
		If S > L Then
			N1 = N
			f1 = f
			S1 = S
		Else
			N0 = N
			f0 = f
			S0 = S
		End If
		N = N0 + int((N1 - N0) / 2)
		Call EvalSum(V0, V1, L, N, S, f)
	Wend
	
	If S < L Then
		N = N1
		f = f1
		S = S1
	End If

	'RIPARTIZIONE DELL'ERRORE IMPLICITO

	E = (L - V0 - V1) / (S - V0 - V1)
		
	rhino.AddLine array(0, 0, 0), array(L, 0, 0)
	rhino.AddPoint array(0, 0, 0)
	rhino.AddPoint array(L, 0, 0)
	rhino.AddPoint array(V0, 0, 0)
	S = 0
	For i=1 To N - 1
		S = S + V0 * f ^ i
		rhino.AddPoint array(V0 + S * E, 0, 0)
	Next
End Sub
1 Mi Piace

Con una definizione GH anch’io avevo ottenuto più o meno lo stesso risultato di Sergio.
Il problema è che la proporzione tra il primo e secondo segmento ovvero tra l’ultimo e il penultimo non rispettano il criterio richiesto.
quadrati f.gh (29,5 KB)

Ciao Leo

non ho visionato i codici GH postati e il codice di Alessio.

Il problema ha due equazioni:

L = V0 + V0f V0f^2 + V0f^3 + … + V0f^N (b)
V1 = V0 * f ^N (a)

dove f è il fattore di scala,
V0 la dimensione iniziale,
V1 è la dimensione finale;
L è la somma di tutte le N “dimensioni”.

Visto che N è un numero intero, le equazioni di tipo non lineare e f>0 non si può procedere per sostituzione di (a) in (b) del tipo:

L - V0 - V1 = V0f + V0f^2 + V0f^3 + … + V0f^(N-1)

ovvero

K = V0f + V0f^2 + V0f^3 + … + V0f^(N-1)

proprio perché si perde la relazione tra i valori estremi.

No, scusa il rimambimento, chissà perché ho scritto Alessio, volevo dire Sergio.
Mi riferivo al tuo codice.

1 Mi Piace

ciao Sergio e grazie per lo script che ho provato sia comparando i valori in Rh che in Gh

immagine

come appunto ha sottolineato anche Leopoldo il primo e ultimo valore non sono coerenti

Ciao ragazzi,
ho provato a cambiare il rapporto tra rettangoli gradualmente.
Dopo parecchi tentativi e parecchia confusione ho trovato questo, sempre se funziona,
Ovviamente non ho la minima idea di come dovrebbe essere la soluzione migliore … :confused:

salvio-28.gh (35,1 KB)

EDIT:

Hmmm … no.
Ci sono dei rapporti ripetuti.
Va riguardata. :confused:

Ciao

Forse cosi’ va meglio …

[ AGGIORNATO ]

salvio-28b.gh (31,2 KB)

1 Mi Piace