feat: Add angle mode toggle and apply to trig functions

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-03-14 13:30:51 -06:00
committed by Tanner
parent 3c18e0326d
commit 8b5ac36284
+45 -10
View File
@@ -64,10 +64,11 @@ var scientificOperators = {
'sin': {grid: [0, 0], val: 'sin'}, 'sin': {grid: [0, 0], val: 'sin'},
'cos': {grid: [1, 0], val: 'cos'}, 'cos': {grid: [1, 0], val: 'cos'},
'tan': {grid: [0, 1], val: 'tan'}, 'tan': {grid: [0, 1], val: 'tan'},
'log': {grid: [1, 1], val: 'log'}, 'angleMode': {grid: [1, 1], val: 'rad'},
'tenpow': {grid: [0, 2], val: '10^x'}, 'log': {grid: [0, 2], val: 'log'},
'ln': {grid: [1, 2], val: 'ln'}, 'tenpow': {grid: [1, 2], val: '10^x'},
'epow': {grid: [0, 3], val: 'e^x'}, 'ln': {grid: [0, 3], val: 'ln'},
'epow': {grid: [1, 3], val: 'e^x'},
}; };
var specialsGrid = [2, 2]; var specialsGrid = [2, 2];
@@ -85,6 +86,7 @@ var operator = null;
var results = null; var results = null;
var isDecimal = false; var isDecimal = false;
var hasPressedEquals = false; var hasPressedEquals = false;
var angleMode = 'rad';
function prepareScreen(screen, grid, defaultColor) { function prepareScreen(screen, grid, defaultColor) {
for (var k in screen) { for (var k in screen) {
@@ -360,30 +362,54 @@ function buttonPress(val) {
break; break;
case 'sin': case 'sin':
if (results != null) { if (results != null) {
results = Math.sin(results); let angle = results;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
results = Math.sin(angle);
displayOutput(results); displayOutput(results);
} else if (currNumber != null) { } else if (currNumber != null) {
currNumber = Math.sin(currNumber); let angle = currNumber;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
currNumber = Math.sin(angle);
displayOutput(currNumber); displayOutput(currNumber);
} }
hasPressedNumber = false; hasPressedNumber = false;
break; break;
case 'cos': case 'cos':
if (results != null) { if (results != null) {
results = Math.cos(results); let angle = results;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
results = Math.cos(angle);
displayOutput(results); displayOutput(results);
} else if (currNumber != null) { } else if (currNumber != null) {
currNumber = Math.cos(currNumber); let angle = currNumber;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
currNumber = Math.cos(angle);
displayOutput(currNumber); displayOutput(currNumber);
} }
hasPressedNumber = false; hasPressedNumber = false;
break; break;
case 'tan': case 'tan':
if (results != null) { if (results != null) {
results = Math.tan(results); let angle = results;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
results = Math.tan(angle);
displayOutput(results); displayOutput(results);
} else if (currNumber != null) { } else if (currNumber != null) {
currNumber = Math.tan(currNumber); let angle = currNumber;
if (angleMode === 'deg') {
angle = angle * Math.PI / 180;
}
currNumber = Math.tan(angle);
displayOutput(currNumber); displayOutput(currNumber);
} }
hasPressedNumber = false; hasPressedNumber = false;
@@ -428,6 +454,15 @@ function buttonPress(val) {
} }
hasPressedNumber = false; hasPressedNumber = false;
break; break;
case 'angleMode':
if (angleMode === 'rad') {
angleMode = 'deg';
} else {
angleMode = 'rad';
}
scientificOperators.angleMode.val = angleMode;
drawKey('angleMode', scientificOperators.angleMode);
break;
case 'i': case 'i':
if (results != null) { if (results != null) {
results = divide(1, results); results = divide(1, results);