public static void Mirror(this Curve2 curve, float mirrorError, Curve2 origin = null) { var axis = 0.5f;//mirrorAxis var append = new List <Key2>(); foreach (var k in curve) { if (Mathf.Abs(k.time - axis) < mirrorError)//points on mirror axis { if (origin != null) { var key = origin[curve.IndexOf(k)]; key.SetVector(new Vector2(axis, k.value)); //key.outMode = key.inMode; //key.outMode = KeyMode.None; } k.SetVector(new Vector2(axis, k.value)); k.outTan = k.inTan.MirrorX(axis); k.outMode = k.inMode; } else { var n = k.Clone(); ComTool.Swap(ref n.inTan, ref n.outTan);//先把切线翻转 n.inTan = n.inTan.MirrorX(n.time); n.outTan = n.outTan.MirrorX(n.time); n.SetVector(n.vector.MirrorX(axis)); // 然后SetVector一起拉过去 ComTool.Swap(ref n.inMode, ref n.outMode); append.Add(n); } } curve.keys.AddRange(append); curve.Sort(); }
//public Vector3 normal; //public Vector3 na, nb, nc, nd; public static Quad ToReverse(Quad quad) { ComTool.Swap(ref quad.a, ref quad.d); return(quad); }