虫洞 发表于 2013-7-4 17:52:29

已知四边形ABCD的边长AB,BC,CD,DA,以及面积S,求AC的长度

本帖最后由 虫洞 于 2013-7-5 12:09 编辑

http://www.autoitx.com/attachment.php?aid=MjQxMjJ8YWM4YjE2YzN8MTM3Mjk5NzI0NXw5MmViNk1PYVhaUURWMlFUblJBNDhLUzlVUWkycjBzZmorSTJ1VHFROWovQVNjWQ%3D%3D&noupdate=yes
已知四边形ABCD的边长AB,BC,CD,DA,以及面积S,求AC的长度。
举个实际例子,已知AB=15,BC=16,CD=17,DA=18,四边形ABCD的面积为260,求AC的长度。(如果结果有两个,解出两个)

程序要求,输入变量$a、$b、$c、$d,以及面积$s,求出AC的长度,答案有三种,1.无解、2.一个解、3.两个解


我只能做出一各解的答案,请教各位大牛,如何完美考虑到三种情况,我的程序只能解出一各解,我把我的答案隐藏,大家发挥一下。$AB = 15;a
$BC = 16;b
$CD = 17;c
$DA = 18;b
$S = 260;四边形ABCD的面积
$TEM = 100
Dim $cc
For $c = 10 To 30 Step 0.001
        $sx = san($AB,$BC,$c)+san($CD,$DA,$c)
        If Abs(($S-$sx)) < $TEM Then
                $TEM = $S-$sx
                $cc = $c
        EndIf
Next
$sx = san($AB,$BC,$cc)+san($CD,$DA,$c)
InputBox(0,'最小面积差为:'&$TEM,'AC的边长为:'&$cc)
Func san($a,$b,$c);三角形面积计算
        Return 0.25*Sqrt(($a+$b+$c)*($a+$b-$c)*($a-$b+$c)*($c-$a+$b))
EndFunc

xlj310 发表于 2013-7-4 19:15:42

这中学题目拿出来给网友做?

虫洞 发表于 2013-7-5 00:24:48

这中学题目拿出来给网友做?
xlj310 发表于 2013-7-4 19:15 http://autoitx.com/images/common/back.gif


    听口气有点狂,只可惜了,你连初中题目都不会做

tryhi 发表于 2013-7-5 00:54:23

稍微修改一下,变成两个解求法。$AB = 15;a
$BC = 16;b
$CD = 17;c
$DA = 18;b
$S = 260;四边形ABCD的面积
$TEM1 = 0
Dim $jie,$n = 0
For $c = 10 To 30 Step 0.001
        $sx = san($AB,$BC,$c)+san($CD,$DA,$c)
        $TEM2 = $S-$sx
        If $TEM1 * $TEM2 < 0 Or $TEM2 = 0 Then
                If Abs($TEM1) > Abs($TEM2) Then
                        $jie[$n] = $c
                Else
                        $jie[$n] = $c - 0.001
                EndIf
                $n += 1
        EndIf
        $TEM1 = $TEM2
        If $n = 2 Then ExitLoop
Next
MsgBox(0,0,'解1:AC边长为:'&$jie&@CRLF&'解2:AC边长为:'&$jie)
Func san($a,$b,$c);三角形面积计算
        Return 0.25*Sqrt(($a+$b+$c)*($a+$b-$c)*($a-$b+$c)*($c-$a+$b))
EndFunc

netegg 发表于 2013-7-5 08:33:36

包括凹四边形的情况吗

虫洞 发表于 2013-7-5 09:40:56

包括凹四边形的情况吗
netegg 发表于 2013-7-5 08:33 http://www.autoitx.com/images/common/back.gif


    蛋蛋兄,不包括

netegg 发表于 2013-7-5 11:12:04

类似于三角形面积中的海伦公式:设三条边a,b,c,面积S=√, p=(a+b+c)/2 为半周长.圆内接四边形的四条边为a,b,c,d.有个Brahmagupta公式,其面积S=√[(p-a)(p-b)(p-c)(p-d)],

p=(a+b+c+d)/2 为半周长.

    对于普通四边形,如果其一对内角和为θ,由于四边形的内角和为360度,因此另一对内角和为360-θ。 由Bretschneider公式,此四边形面积S=√[(p-a)(p-b)(p-c)(p-d)-abcdcos^2(θ/2)]。

虫洞 发表于 2013-7-5 12:15:25

类似于三角形面积中的海伦公式:设三条边a,b,c,面积S=√, p=(a+b+c)/2 为半周长.圆内接四边形的四条边为a, ...
netegg 发表于 2013-7-5 11:12 http://www.autoitx.com/images/common/back.gif


    不知AU3语言如何表述

netegg 发表于 2013-7-6 09:22:13

exe的帮助里有海伦公式的函数
页: [1]
查看完整版本: 已知四边形ABCD的边长AB,BC,CD,DA,以及面积S,求AC的长度