private void SpecialLipsPointsUpdate(List <HeadPoint> points, Vector2 targetPoint) { var mouthIndices = headController.GetMouthIndexes(); var borders = new Vector3[] { ProgramCore.Project.DetectedLipsPoints[0], ProgramCore.Project.DetectedLipsPoints[4] }; float maxX, minX; var center = GetCenter(points, mouthIndices, out minX, out maxX); var rightPosUserSelected = MirroredHeadPoint.GetFrontWorldPoint(targetPoint, ProgramCore.CurrentProgram); // перенояем координаты с левой картинки в правой var delta2 = rightPosUserSelected - center; var leftBorder = MirroredHeadPoint.GetFrontWorldPoint(borders[0], ProgramCore.CurrentProgram) - rightPosUserSelected; var rightBorder = MirroredHeadPoint.GetFrontWorldPoint(borders[1], ProgramCore.CurrentProgram) - rightPosUserSelected; minX = minX - center.X; maxX = maxX - center.X; //Подгоняем все точки в центр и растягиваем по ширине foreach (var index in mouthIndices) { var p = points[index]; var dx = p.Value.X - center.X; dx = dx < 0.0f ? (dx * leftBorder.X / minX) : (rightBorder.X * dx / maxX); p.Value = new Vector2(center.X + dx + delta2.X, p.Value.Y + delta2.Y); } //Проставляем фиксированные точки var indices = new int[] { 15, 17, 1, 39, 37, 38, 16, 51, 53 }; var i = 0; foreach (var index in indices) { var p = points[index]; p.Value = MirroredHeadPoint.GetFrontWorldPoint(ProgramCore.Project.DetectedLipsPoints[i++], ProgramCore.CurrentProgram); } foreach (var index in mouthIndices) { var p = points[index]; autodotsShapeHelper.Transform(p.Value, index); } var lipsPoints = new List <Vector2>(); for (int j = 9; j < 13; ++j) { lipsPoints.Add(MirroredHeadPoint.GetFrontWorldPoint(ProgramCore.Project.DetectedLipsPoints[j], ProgramCore.CurrentProgram)); } autodotsShapeHelper.TransformLips(lipsPoints); var aIndex = indices[indices.Length - 2]; var a = points[aIndex]; var bIndex = indices[indices.Length - 1]; var b = points[bIndex]; const float minLipsDist = 0.3f; if (a.Value.Y - b.Value.Y < minLipsDist) { var centerY = (a.Value.Y + b.Value.Y) * 0.5f; a.Value.Y = centerY - minLipsDist * 0.5f; b.Value.Y = centerY + minLipsDist * 0.5f; } autodotsShapeHelper.Transform(a.Value, aIndex); autodotsShapeHelper.Transform(b.Value, bIndex); }