有人能告诉我我的编码是否正确吗?这是我用来求解给定周长、高度和角度的三角形边的代码(有关代数,请参阅http://www.analyzemath.com/Geometry/challenge/triangle_per_alt_angle.html)
Prompt P
Prompt H
Prompt L [the angle]
(HP^2)/(2H(1+cos(L))+2Psin(L))→Y
(-P^2-2(1+cos(L))Y/(-2P)→Z
(Z+sqrt(Z^2-4Y))/2→N
[The same as above but Z-sqrt...]→R
If N>0
N→U
If R>0
R→U
Y/U→V
sqrt(U^2+V^2-2UVcos(L))→W
Disp U
Disp V
Disp W另外,我如何解决这个问题,以便我可以输入角度= 90?另外,在这段代码中,高度是b和c之间的高度有关系吗(再次参考网站)?提前感谢
发布于 2015-03-08 16:18:01
A到基点a之间的距离B和C,与该基点形成直角。推导做出了这一假设,特别是关于它在第二个面积公式1/2 h a中使用h和a的方式。如果h被绘制出来,那么这个精确的公式就不适用了,因为你的第二组输入导致了一个非真实的答案,因为有时一组数学参数可能彼此不一致,并且描述了一个不可能的构造,而你的P、h和L值就是这样做的。具体地说,他们描述了一个不可能的三角形。给定高度h和角度L,可以实现的最小周长P是由h从中间分割的等腰三角形。有了L=30,这就有了周边P = a + b + c = 2h tan15 + h/cos15 + h/cos15,插入你的h=3,就会产生P=7.819。相反,您尝试使用P=3+sqrt(3)=4.732。尝试使用小于7.819的各种数字(加上一点;我在这里进行了四舍五入),您将看到它们都会产生假想的结果。这是数学告诉你,你正在计算一些现实中不可能存在的东西。
如果您在第5行中填充了Y和/之间缺少的右括号,那么您的代码就可以完美地工作。
我写的代码和你的略有不同,下面是我所做的:
Prompt P
Prompt H
Prompt L
HP²/(2H(1+cos(L))+2Psin(L))→Y
(HP-Ysin(L))/H→Z
Z²-4Y→D
If D<0:Then
Disp "IMAGINARY"
Stop
End
(Z+√(D))/2→C
Y/C→B
P-(B+C)→A
Disp A
Disp B
Disp C编辑: @Gabriel,关于角度30-60-90没有什么特别的(关于这个问题);有无限多组P、h和L输入来描述这样的三角形。然而,如果你真的想在答案中得到这样的三角形,你实际上已经改变了问题;不再只知道一个角度L加上P和h,你现在知道三个角度(30-60-90)加上P和h。您现在已经过度指定了三角形,因此可以非常确定的是,随机生成的一组输入将描述一个不可能的三角形。作为一个人为的示例,如果将h指定为0.0001,将P指定为99999,那么这显然是不可能的,因为一个高度很小且角度相当不极端( 30-60-90 )的三角形不可能达到其高度的许多倍。
如果只想从P或h中的一个开始,那么可以从已知的P或h加上30-60-90角度的知识导出公式来计算三角形的所有参数。
举一个这样的例子,如果我们假设边a形成90°和60°角之间三角形的底边,那么我们有L=30和(将60°角标记为B)我们有h=b,您可以得到所有参数的简单方程:
P = a + h + c
sin60 = h/c
cos60 = a/c
=> P = c cos60 + c sin60 + c
P = c(cos60 + sin60 + 1)
c = P/(cos60 + sin60 + 1)
b = h = c sin60
a = c cos60插入我们拥有的P=100
c = 100/(cos60 + sin60 + 1) = 42.265
b = h = 36.603
a = 21.132如果在代码中插入P=100、h=36.603和L=30,就会得到这些确切的结果。
发布于 2015-03-09 00:34:51
总是先优化速度,然后优化大小。
进一步优化bgoldst的代码:
Prompt P,H,L
HP²/(2H(1+cos(L))+2Psin(L
.5(Z+√((HP-sin(L)Ans)/H)²-4Ans
{Y/C→B,P-B-Ans,Anshttps://stackoverflow.com/questions/28923520
复制相似问题