mirror of
https://github.com/Noratrieb/TriangleCalculator.git
synced 2026-01-14 16:45:02 +01:00
does work except for when it doesn't
This commit is contained in:
parent
a563b2be9b
commit
c4cdf24376
7 changed files with 282 additions and 95 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
124
.idea/uiDesigner.xml
generated
Normal file
124
.idea/uiDesigner.xml
generated
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
41
src/main/kotlin/Calculator.kt
Normal file
41
src/main/kotlin/Calculator.kt
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
class Calculator {
|
||||||
|
init {
|
||||||
|
var running = true
|
||||||
|
println("Welcome to the calculator, enter a mode")
|
||||||
|
while(running) {
|
||||||
|
println("sides - enter all sides | angle - enter one angle and one side | exit - exit")
|
||||||
|
when (readLine()) {
|
||||||
|
"sides" -> {
|
||||||
|
println("Enter all 3 sides, one after the other")
|
||||||
|
println("a")
|
||||||
|
val a = readLine()
|
||||||
|
println("b")
|
||||||
|
val b = readLine()
|
||||||
|
println("c")
|
||||||
|
val c = readLine()
|
||||||
|
if (a != null && b != null && c != null)
|
||||||
|
println(Triangle(a.toDouble(), b.toDouble(), c.toDouble()))
|
||||||
|
}
|
||||||
|
"angles" -> {
|
||||||
|
println("Enter the values")
|
||||||
|
println("angle name")
|
||||||
|
val aname = readLine()
|
||||||
|
println("angle value")
|
||||||
|
val angle = readLine()
|
||||||
|
println("side name")
|
||||||
|
val sname = readLine()
|
||||||
|
println("side length")
|
||||||
|
val len = readLine()
|
||||||
|
if (aname != null && angle != null && sname != null && len != null)
|
||||||
|
println(Triangle(aname, angle.toDouble(), sname, len.toDouble()))
|
||||||
|
}
|
||||||
|
"exit" -> running = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
Calculator()
|
||||||
|
}
|
||||||
110
src/main/kotlin/Triangle.kt
Normal file
110
src/main/kotlin/Triangle.kt
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
import kotlin.math.PI
|
||||||
|
import kotlin.math.asin
|
||||||
|
import kotlin.math.cos
|
||||||
|
import kotlin.math.sin
|
||||||
|
|
||||||
|
class Triangle() {
|
||||||
|
|
||||||
|
private var a = Side(0.0, "a")
|
||||||
|
private var b = Side(0.0, "b")
|
||||||
|
private var c = Side(0.0, "c")
|
||||||
|
|
||||||
|
private var alpha = Angle(0.0, "alpha")
|
||||||
|
private var beta = Angle(0.0, "beta")
|
||||||
|
private 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" -> {
|
||||||
|
assignSides(::sin, ::cos, angle, sideName, side)
|
||||||
|
}
|
||||||
|
"beta" -> {
|
||||||
|
assignSides(::cos, ::sin, angle, sideName, side)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
throw IllegalArgumentException("Illegal angle $angle")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
calculateAngles()
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(vararg sides: Double) : this() {
|
||||||
|
a = Side(sides[0], "a")
|
||||||
|
b = Side(sides[1], "b")
|
||||||
|
c = Side(sides[2], "c")
|
||||||
|
calculateAngles()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun assignSides(
|
||||||
|
func1: (Double) -> Double,
|
||||||
|
func2: (Double) -> Double,
|
||||||
|
angle: Double,
|
||||||
|
sideName: String,
|
||||||
|
side: Double
|
||||||
|
) {
|
||||||
|
when (sideName) {
|
||||||
|
"a" -> {
|
||||||
|
a = Side(side, "a");
|
||||||
|
c = Side(a / func1(angle), "c")
|
||||||
|
b = Side(c * func2(angle), "b")
|
||||||
|
}
|
||||||
|
"b" -> {
|
||||||
|
b = Side(side, "b")
|
||||||
|
c = Side(b / func2(angle), "c")
|
||||||
|
a = Side(c * func1(angle), "a")
|
||||||
|
}
|
||||||
|
"c" -> {
|
||||||
|
c = Side(side, "c")
|
||||||
|
a = Side(c * func1(angle), "a")
|
||||||
|
b = Side(c * func2(angle), "a")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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")
|
||||||
|
if(gamma.angle != 90.0){
|
||||||
|
throw java.lang.IllegalArgumentException("Invalid Angles")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Double.toDegree() = this * 180 / PI
|
||||||
|
private fun Double.toRadians() = this * PI / 180
|
||||||
|
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Sides: $a, $b, $c Angles: $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)}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,11 @@
|
||||||
import kotlin.math.*
|
|
||||||
import kotlin.reflect.KFunction
|
|
||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
|
|
||||||
|
Calculator()
|
||||||
|
|
||||||
|
//test()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test(){
|
||||||
val triangle = Triangle(4.0, 3.0, 5.0)
|
val triangle = Triangle(4.0, 3.0, 5.0)
|
||||||
println("alpha: a: ${Triangle("alpha", 53.13, "a", 4.0)}")
|
println("alpha: a: ${Triangle("alpha", 53.13, "a", 4.0)}")
|
||||||
println("alpha: b: ${Triangle("alpha", 53.13, "b", 3.0)}")
|
println("alpha: b: ${Triangle("alpha", 53.13, "b", 3.0)}")
|
||||||
|
|
@ -13,98 +17,6 @@ fun main() {
|
||||||
println("\nOriginal$triangle")
|
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" -> {
|
|
||||||
assignSides(::sin, ::cos, angle, sideName, side)
|
|
||||||
}
|
|
||||||
"beta" -> {
|
|
||||||
assignSides(::cos, ::sin, angle, sideName, side)
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
throw IllegalArgumentException("Illegal angle $angle")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
calculateAngles()
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(vararg sides: Double) : this() {
|
|
||||||
a = Side(sides[0], "a")
|
|
||||||
b = Side(sides[1], "b")
|
|
||||||
c = Side(sides[2], "c")
|
|
||||||
calculateAngles()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun assignSides(func1: (Double) -> Double, func2: (Double) -> Double, angle: Double, sideName: String, side: Double){
|
|
||||||
when (sideName) {
|
|
||||||
"a" -> {
|
|
||||||
a = Side(side, "a");
|
|
||||||
c = Side(a / func1(angle), "c")
|
|
||||||
b = Side(c * func2(angle), "b")
|
|
||||||
}
|
|
||||||
"b" -> {
|
|
||||||
b = Side(side, "b")
|
|
||||||
c = Side(b / func2(angle), "c")
|
|
||||||
a = Side(c * func1(angle), "a")
|
|
||||||
}
|
|
||||||
"c" -> {
|
|
||||||
c = Side(side, "c")
|
|
||||||
a = Side(c * func1(angle), "a")
|
|
||||||
b = Side(c * func2(angle), "a")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 "Sides: $a, $b, $c Angles: $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)}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue