求助高手:Delphi5.0下,如何计算三角形面积。请将源码写下。(50分)

  • 主题发起人 liu12wewi
  • 开始时间
to wp231957:
他这个是实时采集的曲线吧,很不规则的,你不要去拟合曲线函数了,
直接利用x步长和y的值进行计算比较简单,x之间的步长应该是很小的,可以直接当一个矩形计算面积了,这么一来好象就用不到高等数学的知识了:)
 
wp231957
邮件已发,请查收
 
来如风大哥,你会吗?帮帮小弟
 
解析几何:
S=|x1*y2+x2*y3+x3*y1-x3*y2-x2*y1-x1*y3|/2
(x1,y1)是点的坐标
|| 表示绝对值
S表示面积
 
劳烦写的详细点可以吗?谢
 
嘿嘿,[^][^]
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TPoint=record
X,Y:Integer;
end;

var
P: array[0..2] of TPoint;

type
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
edt4: TEdit;
edt5: TEdit;
edt6: TEdit;
edt7: TEdit;
img1: TImage;
procedure FormCreate(Sender: TObject);
procedure img1MouseUp(Sender: TObject
Button: TMouseButton;
Shift: TShiftState
X, Y: Integer);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
P[0].X:=0;P[0].Y:=0;
P[1].X:=0;P[1].Y:=0;
P[2].X:=0;P[2].Y:=0;
end;

procedure TForm1.img1MouseUp(Sender: TObject
Button: TMouseButton;
Shift: TShiftState
X, Y: Integer);
begin
P[0].X:=P[1].X;P[0].Y:=P[1].Y;
P[1].X:=P[2].X;P[1].Y:=P[2].Y;
P[2].X:=X;P[2].Y:=Y;

edt1.Text:=IntToStr(P[0].X);
edt2.Text:=IntToStr(P[0].Y);
edt3.Text:=IntToStr(P[1].X);
edt4.Text:=IntToStr(P[1].Y);
edt5.Text:=IntToStr(P[2].X);
edt6.Text:=IntToStr(P[2].Y);

img1.Canvas.Brush.Color:=clWhite;
img1.Canvas.FillRect(img1.ClientRect);
img1.Canvas.MoveTo(P[0].X, P[0].Y);
img1.Canvas.LineTo(P[1].X, P[1].Y);
img1.Canvas.LineTo(P[2].X, P[2].Y);
img1.Canvas.LineTo(P[0].X, P[0].Y);

end;

procedure TForm1.btn1Click(Sender: TObject);
var
SSS:Integer;
begin
SSS := P[0].X*P[1].Y + P[1].X*P[2].Y + P[2].X*P[0].Y
- P[0].X*P[2].Y - P[1].X*P[0].Y - P[2].X*P[1].Y;
SSS := SSS div 2

edt7.Text:=IntToStr(SSS);;
end;

end.
 
你真牛,刚学Delphi就搞这样的问题!有前途~~~~!!
这个是计算多边形的面积嘛!不是三角形!不为有个问题是你这个图形不封闭,要从哪儿求到哪?
 
就是从那个类似山峰的两边底段开始,算整个峰值面积.苦啊???高手帮帮忙吧,小弟跪谢了!
 
各位大侠帮帮小弟吧,这个问题太难了,难道没人会吗?
 
1. 首先你要到得原始的数据点
2. 其次你要得到采集频率,计算出点与点之间的时间 (一般为ms)
3. 可以这样计算.把图形分段成很多长方形+一个三角形.一个一个计算,算了累加


题外话:
我觉得这个面积没什么用.横坐标是时间,列坐标是量化值.
时间 * 量化值 什么都不是.
我不知道你们最终想分析什么?但我觉得是不是你们的方向错误了.
 
操练新生。楼上说的对,统计这个没什么意义的,或者是想进行其他分析,准备分析其他的,所以这个程序要做的通用点才有用,至少自动找转折点才够用
 
其实这个我认为对软件来说没有什么意义,但是从实验的角度来讲,是需要计算这个所谓的峰面积的.所以现在就不要去管他有没有意义,只请高手帮我能算出来就好了.这个对于我来说烦啊!!
 
已知三个点坐标
A(x1,y1)
B(x2,y2)
C(x3,y3)
function GetS(x1,y1,x2,y2,x3,y3:integer):real;
var a,b,c,p:real;
begin
a:=sqrt(sqr(abs(x2-x3))+sqr(abs(y2-y3)));
b:=sqrt(sqr(abs(x3-x1))+sqr(abs(y3-y1)));
c:=sqrt(sqr(abs(x2-x1))+sqr(abs(y2-y1)));
p:=(a+b+c)/2;
Result:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
 
我的方法是可行的.楼主又不去做,只知道在这里问人,

如果你指望用什么公式,或控件一下就搞定了的话,我看你还是不要用 Delphi 了.
 
没有见到图形,不能给出具体方法,但是可以用积分的极限思想,分成若干等分的直角梯形,求近似值。这是数值方法问题。只要有图,不超过10行核心代码的。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
524
import
I
I
回复
0
查看
864
import
I
顶部