(El cálculo realizado aquí es una aproximación).
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/accelerationTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Acceleration: " android:textSize="18sp" /> <EditText android:id="@+id/massEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter Mass" android:inputType="numberDecimal" android:textSize="18sp" /> <TextView android:id="@+id/forceTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Force: " android:textSize="18sp" /> </LinearLayout> |
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package com.example.myapplication.presentation import android.app.Activity import android.content.Context import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import android.os.Bundle import android.widget.EditText import android.widget.TextView import com.example.myapplication.R import kotlin.math.sqrt class MainActivity : Activity(), SensorEventListener { private lateinit var sensorManager: SensorManager private lateinit var accelerometer: Sensor private lateinit var accelerationTextView: TextView private lateinit var massEditText: EditText override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) accelerationTextView = findViewById(R.id.accelerationTextView) massEditText = findViewById(R.id.massEditText) sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)!! } override fun onResume() { super.onResume() sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) } override fun onPause() { super.onPause() sensorManager.unregisterListener(this) } private var maxForce = 0f // Variable para almacenar la máxima fuerza private var previousMass = 0f // Variable para almacenar el valor anterior de la masa override fun onSensorChanged(event: SensorEvent?) { if (event?.sensor?.type == Sensor.TYPE_ACCELEROMETER) { val accelerationX = event.values[0] val accelerationY = event.values[1] val accelerationZ = event.values[2] val totalAcceleration = calculateTotalAcceleration(accelerationX, accelerationY, accelerationZ) accelerationTextView.text = "Total Acceleration: $totalAcceleration" val mass = massEditText.text.toString().toFloatOrNull() ?: return // Comprobar si el valor de masa ha cambiado if (mass != previousMass) { maxForce = 0f // Reiniciar maxForce si la masa ha cambiado previousMass = mass // Actualizar el valor de la masa previa } val force = calculateForce(totalAcceleration, mass) // Comprobar si el nuevo valor de fuerza es mayor que el máximo registrado if (force > maxForce) { maxForce = force // Actualizar el máximo registrado findViewById<TextView>(R.id.forceTextView).text = "Force: $maxForce N" } } } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { // Handle accuracy changes if needed } private fun calculateTotalAcceleration(x: Float, y: Float, z: Float): Float { return sqrt(x * x + y * y + z * z) } private fun calculateForce(acceleration: Float, mass: Float): Float { return mass * acceleration } } |
Explicación del código
En términos generales, si mueves una masa rápidamente, la fuerza ejercida puede ser mayor. La fuerza es el producto de la masa y la aceleración; por lo tanto, si aplicas una aceleración significativa a una masa, la fuerza resultante también será mayor.
El movimiento rápido puede implicar una aceleración más alta, lo que a su vez aumentaría la fuerza. Esto se basa en la segunda ley de Newton, que establece que la fuerza aplicada a un objeto es igual a la masa del objeto multiplicada por su aceleración. Si aumentas la velocidad de un objeto (lo que implica una mayor aceleración), la fuerza ejercida aumentará.