JME (Java Math Expression) Wiki
Evaluador de expresiones matemáticas para Java en español
Brought to you by:
mamb
En este ejemplo se muestran algunas coordenadas de una circunferencia usando su ecuación vectorial:
package jme;
import java.text.DecimalFormat;
import jme.Expresion;
import jme.excepciones.ExpresionException;
import jme.terminales.VectorEvaluado;
/**
* Obtener los puntos de una circunferencia de
* forma paramétrica usando JME.
*
* Se usará la expresión [a,b]+r[cos(t),sin(t)].
* Alternativamente [a+r*cos(t),b+r*sin(t)].
*/
public class Circunferencia
{
public static void main( String[] args )
{
try
{
// Establecer expresión y constantes
final Expresion paramCirc = new Expresion( "[a,b]+r[cos(t),sin(t)]" ); // forma paramétrica de una circunferencia centrada en (a,b) de radio 'r'
paramCirc.setConstante( "a", 3 ).setConstante( "b", 1 ); // se establece el centro de la circunferencia
paramCirc.setConstante( "r", 2 ); // se establece el radio (se pueden establecer las constantes en una línea, o usando varias)
// iterar sobre variable paramétrica 't' desde 0 a 2pi
final DecimalFormat df = new DecimalFormat( "0.000" );
for ( double t = 0; t < 2*Math.PI; t += 0.1 )
{
paramCirc.setVariable( "t", t );
final VectorEvaluado resultado = paramCirc.evaluarAVector(); // el resultado será un vector bidimensional (x,y). Se puede comprobar con el método '#esVector'
final double x = resultado.getNumero(0).doble(),
y = resultado.getNumero(1).doble();
System.out.println( "t(" + df.format(t) + ") -> (" + df.format(x) + "," + df.format(y) + ")" );
}
}
catch ( ExpresionException e )
{
System.err.println( e.getMessage() );
}
}
}
Output:
t(0,000) -> (5,000,1,000)
t(0,100) -> (4,990,1,200)
t(0,200) -> (4,960,1,397)
t(0,300) -> (4,911,1,591)
t(0,400) -> (4,842,1,779)
t(0,500) -> (4,755,1,959)
t(0,600) -> (4,651,2,129)
t(0,700) -> (4,530,2,288)
t(0,800) -> (4,393,2,435)
t(0,900) -> (4,243,2,567)
...
El jar ejecutable lanza el modo REPL.
Aproximación de la integral con redondeo y sin redondeo:
>>> int(abs(sin(x)),x,0,pi2,1e6)
==> RealDoble: 4.00000000000007
(parse: 279µs(0%) / eval: 1,24s(100%) / total: 1,24s)
>>> roundp si
roundp=true prec=1.0E-12
>>> int(abs(sin(x)),x,0,pi2,1e6)
==> RealDoble: 4
(parse: 298µs(0%) / eval: 1,005s(100%) / total: 1,005s)
>>>