@ -26,7 +26,6 @@ class CanvasPendulum @JvmOverloads constructor(
this . canvas = it
}
//println("ONDRAW")
//draw line
mPendulum . startPosition . x = ( width / 2 ) . toFloat ( )
paint . isAntiAlias = true
@ -48,7 +47,7 @@ class CanvasPendulum @JvmOverloads constructor(
canvas ?. drawCircle (
mPendulum . stopPosition . x ,
mPendulum . stopPosition . y ,
mPendulum . ballr ,
mPendulum . ballRadius ,
paint
)
@ -57,7 +56,7 @@ class CanvasPendulum @JvmOverloads constructor(
paint . strokeWidth = 1f
paint . color = Color . RED
if ( mPendulum . angleVelocity > 0 ) {
if ( mPendulum . stopPosition . x < ( width / 3 ) - 30f & & mPendulum . stopPosition . x + 30 > ( width / 3 ) - 30f - mPendulum . ballr ) {
if ( mPendulum . stopPosition . x < ( width / 3 ) - 30f & & mPendulum . stopPosition . x + 30 > ( width / 3 ) - 30f - mPendulum . ballRadius ) {
paint . style = Paint . Style . FILL_AND_STROKE
paint . strokeWidth = 10f
paint . color = Color . GREEN
@ -70,7 +69,7 @@ class CanvasPendulum @JvmOverloads constructor(
paint . strokeWidth = 1f
paint . color = Color . RED
if ( mPendulum . angleVelocity < 0 ) {
if ( mPendulum . stopPosition . x > ( width / 1.5 ) - 30f & & mPendulum . stopPosition . x + 30 < ( width / 1.5 ) + 30f + mPendulum . ballr ) {
if ( mPendulum . stopPosition . x > ( width / 1.5 ) - 30f & & mPendulum . stopPosition . x + 30 < ( width / 1.5 ) + 30f + mPendulum . ballRadius ) {
paint . style = Paint . Style . FILL_AND_STROKE
paint . strokeWidth = 10f
paint . color = Color . GREEN
@ -86,45 +85,39 @@ class CanvasPendulum @JvmOverloads constructor(
if ( mPendulum . magneticField ) {
var gravity = 0.981f
var damping = 0.996f
if ( mPendulum . stopPosition . x > canvas . width / 4f & & mPendulum . stopPosition . x < = canvas . width * 0.75f ) {
gravity = 1.981f
mPendulum . gravity = 1.981f
if ( mPendulum . stopPosition . x > canvas . width / 3. toFloat ( ) & & mPendulum . stopPosition . x < = canvas . width / 1.5 . toFloat ( ) ) {
gravity = 2.981f
mPendulum . gravity = 2.981f
if ( mPendulum . stopPosition . x > = canvas . width / 2. toFloat ( ) - 3 & & mPendulum . stopPosition . x < = canvas . width / 2. toFloat ( ) + 3 ) {
damping = 0.3f
mPendulum . damping = 0.3f
}
}
}
mPendulum . angleAcceleration =
( ( - 1 * gravity / mPendulum . r ) * ( mPendulum . angle ) ) . toFloat ( )
mPendulum . angleAcceleration = ( ( - 1 * mPendulum . gravity / mPendulum . stringLength ) * ( mPendulum . startAngle ) ) . toFloat ( )
mPendulum . angleVelocity + = mPendulum . angleAcceleration
mPendulum . angleVelocity * = damping
mPendulum . angle + = mPendulum . angleVelocity
mPendulum . angleVelocity * = mPendulum . damping
mPendulum . st artA ngle + = mPendulum . angleVelocity
//Polar to cartesian conversion
mPendulum . stopPosition . x = mPendulum . r * ( sin ( mPendulum . angle ) ) . toFloat ( )
mPendulum . stopPosition . y = mPendulum . r * ( cos ( mPendulum . angle ) ) . toFloat ( )
mPendulum . stopPosition . x = mPendulum . st ringLength * ( sin ( mPendulum . st artA ngle) ) . toFloat ( )
mPendulum . stopPosition . y = mPendulum . st ringLength * ( cos ( mPendulum . st artA ngle) ) . toFloat ( )
//Origin transition
mPendulum . stopPosition . x + = mPendulum . startPosition . x
}
if ( ! mPendulum . magneticField ) {
val gravity = 0.981f
val damping = 0.996f
mPendulum . angleAcceleration =
( ( - 1 * gravity / mPendulum . r ) * ( mPendulum . angle ) ) . toFloat ( )
mPendulum . angleAcceleration = ( ( - 1 * mPendulum . gravity / mPendulum . st ringLength ) * ( mPendulum . st artA ngle) ) . toFloat ( )
mPendulum . angleVelocity + = mPendulum . angleAcceleration
mPendulum . angleVelocity * = damping
mPendulum . angle + = mPendulum . angleVelocity
mPendulum . angleVelocity * = mPendulum . damping
mPendulum . st artA ngle + = mPendulum . angleVelocity
//Polar to cartesian conversion
mPendulum . stopPosition . x = mPendulum . r * ( sin ( mPendulum . angle ) ) . toFloat ( )
mPendulum . stopPosition . y = mPendulum . r * ( cos ( mPendulum . angle ) ) . toFloat ( )
mPendulum . stopPosition . x = mPendulum . st ringLength * ( sin ( mPendulum . st artA ngle) ) . toFloat ( )
mPendulum . stopPosition . y = mPendulum . st ringLength * ( cos ( mPendulum . st artA ngle) ) . toFloat ( )
//Origin transition
mPendulum . stopPosition . x + = mPendulum . startPosition . x
}
@ -154,13 +147,14 @@ class Pendulum {
var startPosition : Position = Position ( 0f , 0f )
var stopPosition : Position = Position ( 0f , 0f )
var r = 8 00f
var stringLength = 9 00f
//PI/6 Max ausschwingen
var angle : Double = Math . PI / 12
//start angle
var st artA ngle: Double = Math . PI / 12
var angleVelocity : Float = 0.0f //
var angleAcceleration : Float = 0.0f //
var ballr : Float = 70.0f //
var ballRadius : Float = 70.0f //
var magneticField : Boolean = false
var gravity = 0.981f
var damping = 0.996f
}