给三个坐标 计算三角形面积有没有好点的算法

jacky_ji 2005-10-30 01:06:20
RT 给坐标(a,b)(c,d)(e,f) 算构成的三角形面积
我是想先算三根线长 在判断是否构成三角形 之后在用公式计算面积
但给三根线算长度太复杂了 有没有比较好点的算法 比如SIN 或者 点到直线距离.....
...全文
2492 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-10-31
  • 打赏
  • 举报
回复
对于一个简单的多边形,顶点坐标时 Pi(xi,yi)
那么他的面积就是

. 1 |x1 y1| |x2 y2| |xn yn|
. s = - { | | + | | + ...... + | | }
. 2 |x2 y2| |x3 y3| |x1 y1|

s大于0时表示顶点是逆时针顺序, s小于0的时候表示的是顺时针的顺序

三角形当然也适用上面的法则
百分百好牛 2005-10-31
  • 打赏
  • 举报
回复
俺已经完蛋了.
叉乘的公式忘了.
:(
谁贴出来先.
谢谢
xiaocai0001 2005-10-30
  • 打赏
  • 举报
回复
你的更好, 指的是什么呢?
根据哪些条件, 得到面积

你现在的只有三个点的坐标.
用海伦公式应该是比较好的啊

要不, 你就算出AB直线的解析式, 然后求出C到AB直线的距离, 再用S=底*高/2 来计算面积
这个方法也不简单啊~
jacky_ji 2005-10-30
  • 打赏
  • 举报
回复
谢谢xiaocai0001 这两个公式我知道 我是想请问一下 是否有更好的算法
jacky_ji 2005-10-30
  • 打赏
  • 举报
回复
基本搞定了hkbpro(UT2004)的方法比较OK 后面那位朋友的方法和hkbpro(UT2004)相同 不过我是用类做的 网上我找到了那集训题 看看还不错
xiaocai0001 2005-10-30
  • 打赏
  • 举报
回复
海伦公式:
L = (a+b+c)/2
S = sqrt(L*(L-a)*(L-b)*(L-c))

正弦公式
S = (1/2)*a*b*sinα (α是a,b两线夹角)
drizzlecrj 2005-10-30
  • 打赏
  • 举报
回复
用两个向量叉乘的模除以2即可。
#include <iostream>
#include <cmath>

using namespace std;

struct POINT
{
double x;
double y;
};

int main()
{
POINT a, b, c;
POINT AB, BC;
while(cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y)
{
AB.x = b.x - a.x;
AB.y = b.y - a.y;
BC.x = c.x - b.x;
BC.y = c.y - b.y;
cout.precision(6);
cout.setf(ios::fixed);
cout << fabs((AB.x * BC.y - AB.y * BC.x)) / 2.0f << endl;
}

return 0;
}
00:00.160 695 Kb
drizzlecrj 2005-10-30
  • 打赏
  • 举报
回复
stu1061 Area of Triangle(集训题V-三角形)



Area of Triangle(集训题V-三角形)

--------------------------------------------------------------------------------

时间限制: 1 Seconds 内存限制: 32768 Kb
总提交: 253 总通过: 105

--------------------------------------------------------------------------------

求三角形面积


问题描述:

给出二维空间上的三个点a,b,c,它们的坐标分别为,(x1,y1),(x2,y2),(x3,y3)。请编写一个程序,求出这三点所构成的三角形的面积。其中所有整数的取值范围是[-100,100]。



输入格式:

每行有6个整数,用空格分开,分别表示x1,y1,x2,y2,x3,y3。有多个测试数据,直到输入文件结束为止。



输出格式:

每行输出对应于输入给出的三角形的面积,精确到6位小数。



输入样例:

0 0 4 0 0 3



输出样例:

6.000000

-----------------------
Author: Lewjan
jacky_ji 2005-10-30
  • 打赏
  • 举报
回复
点到直线的距离还要复杂 并且如果算法不够好的话 是无法计算钝角三角形的 觉得hkbpro(UT2004)这个算法不错 去找线代的书看看 先谢过各位
rabbitweng 2005-10-30
  • 打赏
  • 举报
回复
看看线性代数中的点积和叉积就能知道如何用矩阵的方法求面积了,
而且这样不用判断这三个点是否能构成三角形,因为算出的行列式如果为0就表示了这种情况了
charlescpp 2005-10-30
  • 打赏
  • 举报
回复
楼上的是对的

面积就是0.5*向量|AB|叉|AC|,再求绝对值
这个只有乘法和加法,精度高 :)
hkbpro 2005-10-30
  • 打赏
  • 举报
回复
已知三角形的三个点的坐标(x1, y1), (x2, y2), (x3, y3)
面积S=abs((x1*y2 + x2*y3 + x3*y1 - x1*y3 - x2*y1 - x3*y2)/2)
就是行列式的展开

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧