package animation // ExpressionMapping maps emotion values to facial expressions type ExpressionMapping struct { Valence float64 // -1.0 to 1.0 Arousal float64 // 0.0 to 1.0 } // GetExpressionFromEmotion maps emotion to expression parameters func GetExpressionFromEmotion(valence, arousal float64) ExpressionParams { // Map valence/arousal to expression // High valence + high arousal = happy/excited // Low valence + high arousal = angry/frustrated // High valence + low arousal = calm/content // Low valence + low arousal = sad/depressed var emotion string var smileAmount float64 var browRaise float64 var eyeWideness float64 if valence > 0.5 && arousal > 0.5 { emotion = "happy" smileAmount = 0.8 browRaise = 0.3 eyeWideness = 0.6 } else if valence < -0.5 && arousal > 0.5 { emotion = "angry" smileAmount = -0.5 browRaise = -0.7 eyeWideness = 0.8 } else if valence > 0.3 && arousal < 0.3 { emotion = "calm" smileAmount = 0.3 browRaise = 0.0 eyeWideness = 0.4 } else if valence < -0.3 && arousal < 0.3 { emotion = "sad" smileAmount = -0.3 browRaise = 0.2 eyeWideness = 0.3 } else { emotion = "neutral" smileAmount = 0.0 browRaise = 0.0 eyeWideness = 0.5 } return ExpressionParams{ Emotion: emotion, SmileAmount: smileAmount, BrowRaise: browRaise, EyeWideness: eyeWideness, Valence: valence, Arousal: arousal, } } // ExpressionParams contains facial expression parameters type ExpressionParams struct { Emotion string SmileAmount float64 // -1.0 to 1.0 BrowRaise float64 // -1.0 to 1.0 EyeWideness float64 // 0.0 to 1.0 Valence float64 Arousal float64 }