Cómo suavizar el segmento de línea WPF de la trayectoria de la figura
A continuación se muestra el código de Android.
path.moveTo(xx, yy); for (...) { path.lineTo(xx, yy); } canvas.drawPath(this.path, paint);
- Visual Studio Android Emulator - Grabación de video
- Mono para Android: ListView Eliminar elementos NotifyDataSet modificado
- Conecte la PC y el teléfono Android con bluetooth (c #)
- Xamarin.Forms SetHasNavigationBar causas falsas salto en PushAsync
- Mono Droid onClick evento no encontrado
Para quitar la esquina aguda , estoy usando
final CornerPathEffect cornerPathEffect = new CornerPathEffect(50); paint.setPathEffect(cornerPathEffect);
Cuando viene a WPF , estoy usando el código siguiente.
PathFigure pathFigure = new PathFigure(); pathFigure.StartPoint = new Point(xx, yy); for (...) { LineSegment lineSegment = new LineSegment(new Point(xx, yy), true); lineSegment.IsSmoothJoin = true; pathFigure.Segments.Add(lineSegment); } PathGeometry pathGeometry = new PathGeometry(new PathFigure[] { pathFigure }); drawingContext.DrawGeometry(null, new Pen(Brushes.White, 3), pathGeometry);
Estoy obteniendo el siguiente efecto.
Tenga en cuenta que, evito utilizar PolyQuadraticBezierSegment
o PolyBezierSegment
. Tiende a ser inestable . Esto significa que cada vez que añado un nuevo punto de entrada al gráfico de líneas, el punto recién agregado tenderá a cambiar el antiguo camino, que ya está dibujado en la pantalla. Como un efecto final, usted puede observar todo el gráfico de línea está temblando
¿Puedo saber en WPF, cómo puedo suavizar el segmento de línea? Aunque he utilizado lineSegment.IsSmoothJoin = true;
, Todavía puedo ver la esquina aguda. ¿Puedo tener algo equivalente a CornerPathEffect de Android?
- Unity c #, tomar captura de pantalla y guardar en archivo como jpg
- No se puede detectar la vista web Appium
- Descenso Xamarin.Android
- Desarrollar la aplicación de Android utilizando C #
- Teclado rápidamente se oculta y reaparece en Android usando Xamarin Forms
- Enviar mensaje a Whatsapp / Tango / Kik / Viber por correo electrónico
- Guardar Bitmap en un archivo - Xamarin, Monodroid
- Unity C # scrollable GUI.BOX no funciona en android
Lo sé, zombie hilo post. Usted probablemente ya ha resuelto este problema, pero aquí están mis pensamientos años después del hecho …
Como el suavizado depende de varios puntos de la línea, creo que será bastante difícil encontrar un algoritmo de suavizado que parezca razonable sin producir alguna inestabilidad en el borde de ataque. Probablemente puede reducir el alcance de la inestabilidad, pero sólo en el riesgo de producir un rastro de aspecto muy extraño.
La primera opción sería utilizar un algoritmo spline que limite los artefactos de proyección. Por ejemplo, el algoritmo Catmull-Rom utiliza dos puntos conocidos a cada lado del segmento de curva que se interpola. Puede sintetizar dos puntos adicionales en cada extremo de la curva o simplemente dibujar el primer segmento de curva como una línea recta. Esto dará una línea recta como el último segmento, más una curva como el segundo al último segmento que debería cambiar muy poco si es que cuando se agrega otro punto.
Alternativamente, puede ejecutar los puntos de datos reales a través de un cálculo spline inicial para multiplicar los puntos, luego ejecutar esos puntos a través del algo spline por segunda vez. Todavía tendrá que actualizar los últimos 2m
puntos (donde m
es el multiplicador del primer pase) o la salida se verá distorsionada.
Acerca de la única otra opción que puedo pensar es tratar de predecir un par de puntos por delante sobre la base de sus datos anteriores, lo que puede ser difícil, incluso con una entrada bastante regular. Utilicé esto para sintetizar los puntos de control de Bezier para los extremos de mis curvas – estaba calculando CPs para todos los puntos y necesitaba algo para usar para los puntos finales – y tuve algunos momentos interesantes tratando de detener los segmentos de la curva final de mirar horriblemente deformada .
Oh, una más … no graficar el segmento final de la curva. Si termina su curva en P n-1, la curva debe permanecer estable. Dibuja el segmento final en un estilo diferente si debes mostrarlo en absoluto. Dado que las splines CR sólo necesitan +/- 2 puntos conocidos de la interpolación, el segmento P n-2 -P n-1 debería ser lo suficientemente estable.
Si no tiene código para el algoritmo de CR, puede hacer básicamente lo mismo con los puntos de control de Bezier sintéticos. En lugar de tratar de describir el proceso, echa un vistazo a este post del blog que da una buena distribución del proceso. Este artículo tiene código adjunto que puede ser útil.
- Cómo evitar que el teclado en pantalla cubra el EditText en android
- Recursos de Android: ¿Cómo se cargan los mapas de bits de los recursos manejados en cuanto a memoria?