mirror of
https://github.com/Noratrieb/TriangleCalculator.git
synced 2026-01-15 00:55:02 +01:00
124 lines
No EOL
3.7 KiB
Kotlin
124 lines
No EOL
3.7 KiB
Kotlin
import java.lang.IllegalArgumentException
|
|
import kotlin.math.*
|
|
|
|
fun main() {
|
|
val triangle = Triangle(4.0, 3.0, 5.0)
|
|
println("alpha: a: ${Triangle("alpha", 53.13, "a", 4.0)}")
|
|
println("alpha: b: ${Triangle("alpha", 53.13, "b", 3.0)}")
|
|
println("alpha: c: ${Triangle("alpha", 53.13, "c", 5.0)}")
|
|
|
|
println("beta: a: ${Triangle("beta", 36.87, "a", 4.0)}")
|
|
println("beta: b: ${Triangle("beta", 36.87, "b", 3.0)}")
|
|
println("beta: c: ${Triangle("beta", 36.87, "c", 5.0)}")
|
|
println("\nOriginal$triangle")
|
|
}
|
|
|
|
class Triangle() {
|
|
|
|
var a = Side(0.0, "a")
|
|
var b = Side(0.0, "b")
|
|
var c = Side(0.0, "c")
|
|
|
|
var alpha = Angle(0.0, "alpha")
|
|
var beta = Angle(0.0, "beta")
|
|
var gamma = Angle(90.0, "gamma")
|
|
|
|
init {
|
|
|
|
}
|
|
|
|
constructor(angleName: String, angleD: Double, sideName: String, side: Double) : this() {
|
|
val angle = angleD.toRadians() //thanks kotlin
|
|
when (angleName) {
|
|
"alpha" -> {
|
|
alpha = Angle(angleD, "alpha")
|
|
when (sideName) {
|
|
"a" -> {
|
|
a = Side(side, "a");
|
|
c = Side(a / sin(angle), "c")
|
|
b = Side(c * cos(angle), "b")
|
|
}
|
|
"b" -> {
|
|
b = Side(side, "b")
|
|
c = Side(b / cos(angle), "c")
|
|
a = Side(c * sin(angle), "a")
|
|
}
|
|
"c" -> {
|
|
c = Side(side, "c")
|
|
a = Side(c * sin(angle), "a")
|
|
b = Side(c * cos(angle), "a")
|
|
}
|
|
}
|
|
beta = Angle(asin(b.length / c.length).toDegree(), "beta")
|
|
}
|
|
"beta" -> {
|
|
beta = Angle(angleD, "beta")
|
|
when (sideName) {
|
|
"a" -> {
|
|
a = Side(side, "a");
|
|
c = Side(a / cos(angle), "c")
|
|
b = Side(c * sin(angle), "b")
|
|
}
|
|
"b" -> {
|
|
b = Side(side, "b")
|
|
c = Side(b / sin(angle), "c")
|
|
a = Side(c * cos(angle), "a")
|
|
}
|
|
"c" -> {
|
|
c = Side(side, "c")
|
|
a = Side(c * cos(angle), "a")
|
|
b = Side(c * sin(angle), "a")
|
|
}
|
|
}
|
|
}
|
|
else -> {
|
|
throw IllegalArgumentException("$angleName is not a valid angle")
|
|
}
|
|
}
|
|
}
|
|
|
|
constructor(vararg sides: Double) : this() {
|
|
a = Side(sides[0], "a")
|
|
b = Side(sides[1], "b")
|
|
c = Side(sides[2], "c")
|
|
calculateAngles()
|
|
}
|
|
|
|
|
|
private fun calculateAngles() {
|
|
alpha = Angle(asin(a.length / c.length).toDegree(), "alpha")
|
|
beta = Angle(asin(b.length / c.length).toDegree(), "beta")
|
|
gamma = Angle(180 - beta.angle - alpha.angle, "gamma")
|
|
}
|
|
|
|
private fun Double.toDegree() = this * 180 / PI
|
|
private fun Double.toRadians() = this * PI / 180
|
|
|
|
|
|
override fun toString(): String {
|
|
return "Seiten: $a, $b, $c Winkel: $alpha $beta $gamma"
|
|
}
|
|
|
|
}
|
|
|
|
class Side(length: Double, name: String) {
|
|
val length = length
|
|
val name = name
|
|
|
|
operator fun times(other: Double) = this.length * other
|
|
operator fun div(other: Double) = this.length / other
|
|
|
|
override fun toString(): String {
|
|
return "$name = ${"%.2f".format(length)}"
|
|
}
|
|
}
|
|
|
|
class Angle(value: Double, name: String) {
|
|
val angle = value
|
|
val name = name
|
|
|
|
|
|
override fun toString(): String {
|
|
return "$name = ${"%.2f".format(angle)}"
|
|
}
|
|
} |