2016-09-30 1 views

Antwort

1

Ich glaube, dass in Swift GLKVector3 s unveränderlich sind, ob ein var oder ein let. Verwenden Sie GLKVector3Make, um einen mit beliebigen Werten Float zu erstellen; Erstellen Sie anschließend neue Ergebnisse für neue Instanzen.

So:

let ballLocation = GLKVector3Make(
    (locationInBallCoordinates.x - ballCentre.x)/ballRadius, 
    0.0, 
    (locationInBallCoordinates.y - ballCentre.y)/ballRadius) 

Oder, wenn locationInBallCoordinates und ballCentre waren bereits Fälle von GLKVector3 - und die y-to-z-Komponente Schalter, die ich nicht bemerkt hatte, als ich zum ersten Mal diese Antwort schrieb nicht da waren - dann:

let ballLocation = 
    GLKVector3DivideScalar(
     GLKVector3Subtract(locationInBallCoordinates, ballCentre), 
     ballRadius) 

es ist wahrscheinlich am einfachsten zu entpacken und umpacken y s in z s zu bewegen, aber man könnte auch eine Matrix verwenden, multiplizieren, wenn Sie verzweifelt waren es hohe Niveau zu halten.

+1

Yah, ich hatte davor Angst. Seufzer. Macht unnötigen umständlichen/wortreichen Code für Tribal Setting-Operationen wie diese. Weiter. Danke. – dugla

+0

Ahh, eigentlich kann ich + -/* überladen, um die Dinge etwas prägnanter zu machen. Schnelle FTW. – dugla

Verwandte Themen