Dibuja un camino curvo en la lona?
¿Cómo podría dibujar una curva cuadrática o una curva trigonométrica (como sin(x)
) en un Canvas
?
- Android - calcular el ángulo del arco
- Determine el ángulo de visión de la cámara del teléfono inteligente
- Obtener los siguientes N puntos geográficos más cercanos
- Convertir valores de ReplayGain a ajustes de volumen
- ¿Cómo obtengo el ángulo del teléfono en relación con el campo magnético de la Tierra?
- Problema básico de conversión imperial
- ¿Cómo mostrar fórmulas matemáticas en mi aplicación Android?
- 1000 * 60 * 60 * 24 * 30 resultados en un número negativo
- Configuración de la alarma en base mensual android
- ¿Qué es una buena biblioteca para analizar expresiones matemáticas en java?
- Tengo problemas para entender lo que realmente obtiene GetDisplayRect () de PhotoView (construyendo una herramienta de recorte de fotos de android)
- ¿Puede explicar (cálculos matemáticos) ejemplo de gesto (Levenshtein)?
- Android Fourier Transform Realtime - Renderscript
La mayoría de las API de dibujo no proporcionan tales funciones, tendrá que calcular los píxeles de la curva deseada en píxeles y dibujar pieza por pieza en el lienzo utilizando una o más llamadas a la API de lienzo.
Como tú, necesitaba dibujar una línea curva desde el point(x1, y1)
hasta el point (x2, y2)
. Hice algunas búsquedas alrededor de las cuales me llevaron a la clase Path ( android.graphics.Path
). Path tiene numerosos métodos para dibujar líneas. Una vez que haya creado una ruta de acceso, utilice un método de dibujo para crear la línea real. Las rutas se pueden girar, transformar, guardar y agregar. Hay arcos, círculos y rectángulos que se dibujan con esta clase también.
http://developer.android.com/reference/android/graphics/Path.html
Establezca el punto de inicio de la ruta → mPath.moveTo(x1, y1);
Establezca la constante y los puntos finales → mPath.quadTo(cx, cy, x2, y2);
Convertir ruta a línea → canvas.drawPath(mPath, mPaint);
Aquí hay un método drawEquation () que escribí para una clase Graph – creo que puede ayudar. La idea básica de crear un método que acepte una ecuación (que es básicamente una función) como
function(x) = Math.sin(x);
Y luego recorrer los límites del gráfico y dibuja pequeños segmentos que conectan cada punto. El transformContext () sólo invierte el contexto de la lona para que los valores crecientes de y vayan hacia arriba y no hacia abajo:
Graph.prototype.transformContext = function(){ var canvas = this.canvas; var context = this.context; // move context to center of canvas this.context.translate(this.centerX, this.centerY); // stretch grid to fit the canvas window, and // invert the y scale so that that increments // as you move upwards context.scale(this.scaleX, -this.scaleY); }; Graph.prototype.drawEquation = function(equation, color, thickness){ var canvas = this.canvas; var context = this.context; context.save(); this.transformContext(); context.beginPath(); context.moveTo(this.minX, equation(this.minX)); for (var x = this.minX + this.iteration; x <= this.maxX; x += this.iteration) { context.lineTo(x, equation(x)); } context.restore(); context.lineJoin = "round"; context.lineWidth = thickness; context.strokeStyle = color; context.stroke(); };
Utilice Canvas.drawPath
y Path.quadTo
.
Voy a asumir que usted está familiarizado con el dibujo de líneas básicas en un lienzo, si no, entonces responder de nuevo y podemos ahondar más atrás. Sin embargo, en cuanto a dibujar una función seno hay una función dentro de la clase de matemáticas que tiene justo lo que necesita. http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#sin%28double%29 De ahí sólo tienes que pasar tu variable x (en radianes) a la función Y guardar su salida como variable ay. Esto representa un punto en su gráfica. Ahora incremente la variable x1 en una pequeña cantidad (tal vez 1/100 de su gráfico, aunque necesitará ajustarlo a gusto), ejecútelo de nuevo por la función y guarde esas variables (x2 e y2) como su segundo punto. Dibuje una línea entre estos dos puntos. Guarde sus variables x2, y2 como x1, y1 e incremente su valor x de nuevo para encontrar el tercer punto, así sucesivamente y así sucesivamente. Esto no es una "verdadera" curva, ya que es realmente sólo una serie de líneas que se aproximan a la función, un enfoque de cálculo si lo desea.
Asi que:
X _ {1} = x; // donde x es un punto en el eje x en el que desea empezar a graficar.
Y1 = sen (x);
X2 = x1 + incremento;
Y2 = sen (x2);
// Traza una línea aquí
X _ {1} = x _ {2}; Y1 = y2;
// volver al principio, este código obviamente estaría en un bucle en el que se usa incremento ya que es propio incremento con el valor inicial igual a la cantidad que se quiere incrementar cada vez (digamos … .5) y el siguiente Msgstr "instrucción siendo incremento = incremento + 5.
También hay una clase de GraphCanvas que no estoy familiarizado con la que parece tomar los mismos puntos y dibujar la curva entre ellos, aunque no estoy seguro de qué tipo de transformación se está utilizando para dibujar la curva y lo preciso que es. Aquí está la clase: http://www.java2s.com/Code/Java/Swing-Components/GraphCanvas.htm
- Android OpenGL – ES Sangrado de textura
- Android Play Store – Error al recuperar información del servidor. RPC: S-2: AEC-2