2017-09-14 5 views
1

Je crée un script pour déterminer si une forme a été déformée ou mise à l'échelle. Il commence par faire une liste de toutes les longueurs d'une ligne dans une forme, comme ça.AppleScript pour déterminer si une forme a été déformée ou mise à l'échelle

set noofsides to text returned of (display dialog "Enter number of sides:" default answer "") 

set sidevalues to {} 
set repeatnumber to 0 
repeat noofsides times 
    set repeatnumber to repeatnumber + 1 
    set currentsidevalue to text returned of (display dialog "Enter length of line " & repeatnumber & ":" default answer "") 
    set the end of sidevalues to currentsidevalue 
end repeat 

Il fait ensuite la même chose pour la seconde forme éditée. Cela me donne deux listes avec différentes variables. Pour déterminer si les deux formes sont similaires, chaque ligne «avant» divisée par chaque ligne «après» doit être la même. Par exemple, pour un triangle:

firstline1/secondline1 = firstline2/secondline2 = firstline3/secondline3 

Est-il possible de le faire rapidement sans avoir à effectuer les opérations suivantes:

try 
    set primevariable1 to first item of primesidevalues 
    set primevariable2 to second item of primesidevalues 
    set primevariable3 to third item of primesidevalues 
    -- ... 
end try 

try 
    set regularvariable1 to first item of sidevalues 
    set regularvariable2 to second item of sidevalues 
    set regularvariable3 to third item of sidevalues 
    -- ... 
end try 

try 
    variable4 
on error 
    set variable4 to "" 
end try 
if (regularvariable1/primevariable1) = (regularvariable2/primevariable2) and (regularvariable3/primevariable3) = (regularvariable1/primevariable1) and (regularvariable3/primevariable3) = (regularvariable2/primevariable2) and variable4 = "" then 
    display dialog "Shape is similar" 
end if 

C'est seulement pour une 3 forme à sens unique. Si je voulais faire quelque chose avec say, 5 ou 6 côtés, cela deviendrait de plus en plus long. Peut-être quelque chose comme si diviser chaque nombre dans la liste un divisé par chaque nombre dans la liste deux tous égaux, alors la forme est similaire? Quelqu'un peut-il aider?

+0

Existe-t-il des boucles et des variables indexées (listes/tableaux) dans applescript? – MBo

+0

Oui, mais je ne suis pas sûr de savoir comment cela pourrait être implémenté ici. –

+0

Semble 'set sidevalues ​​to {}' indique que 'sidevalues' est une structure de données indexée – MBo

Répondre

0

Obtenez la valeur de (le premier élément de la première liste/le premier élément dans la deuxième liste), utiliser une boucle pour comparer la valeur des éléments d'autres, comme celui-ci:

set sidevalues to my getSidesValue("Enter number of sides for the first shape:") 
set primesidevalues to my getSidesValue("Enter number of sides for the second shape:") 
set tc to count sidevalues 
if tc = (count primesidevalues) then -- the number of items in the lists is the same 
    set isSimilar to true 
    set thisVal to (item 1 of sidevalues)/(item 1 of primesidevalues) -- Get the value of the first item in the lists 
    repeat with i from 2 to tc -- loop to compare the value of the others items 
     if (item i of sidevalues)/(item i of primesidevalues) is not thisVal then -- not the same value 
      set isSimilar to false 
      exit repeat -- no need to continue 
     end if 
    end repeat 
else 
    set isSimilar to false 
end if 
isSimilar 


on getSidesValue(t) 
    set noofsides to text returned of (display dialog t default answer "") 
    set l to {} 
    repeat with i from 1 to noofsides 
     set currentsidevalue to text returned of (display dialog "Enter length of line " & i & ":" default answer "") 
     set the end of l to currentsidevalue 
    end repeat 
    return l 
end getSidesValue