不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决

不会啊,大侠帮忙啊,同一平面上两个三角形相交部分面积
本帖最后由 xiaozhang0372 于 2013-07-04 00:06:57 编辑
仔细观察下列图形:要求编程实现两个三角形相交后重叠部分的面积。真的不会啊啊啊啊啊,
谁给帮忙看看啊啊啊啊啊。。

不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决

不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决

不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决

不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决

这个编程怎么实现啊
------解决方案--------------------
如果是画在屏幕上,求相交的面积有多少像素还好办,用微分的方法就行
如果是连续的,还得积分,麻烦了
或者把每一种相交的情况都考虑到,再判断属于哪一种情况,分别计算各部分面积
------解决方案--------------------
向量叉乘

计算几何大牛:http://www.codeproject.com/KB/recipes/Wykobi.aspx

------解决方案--------------------
海伦公式
------解决方案--------------------
帮帖主搭了个架子。谁让偶只是一名“架构师”呢?
不会啊大侠帮忙啊同一平面上两个三角形相交部分面积,该怎么解决
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
HDC   hdc;
HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void Area_of_intersected_triangle() {
    int n,k;
    HBRUSH hbrush;
    RECT   rect;
    struct P {int x,y;};
    struct T {
        struct P a,b,c;
    } t1,t2;
    char s[10];

    hbrush=CreateSolidBrush((COLORREF)0x00FFFFFF);
    n=1;
    while (1) {
        t1.a.x=5+rand()%296;
        t1.a.y=5+rand()%296;
        t1.b.x=5+rand()%296;
        t1.b.y=5+rand()%296;
        t1.c.x=5+rand()%296;
        t1.c.y=5+rand()%296;
        //TODO:确定三点能构成三角形(任意两边长度之和大于第三边长度)
        //TODO:三点的顺序按逆时针顺序排列

        t2.a.x=5+rand()%296;
        t2.a.y=5+rand()%296;
        t2.b.x=5+rand()%296;
        t2.b.y=5+rand()%296;
        t2.c.x=5+rand()%296;
        t2.c.y=5+rand()%296;
        //TODO:确定三点能构成三角形(任意两边长度之和大于第三边长度)
        //TODO:三点的顺序按逆时针顺序排列

        //判断两个三角形的位置关系:分离、包含、重合(顶点、边)、相交。包含时计算小三角形面积。相交时求出相交部分,并划分为最多四个小三角形求它们的面积和。

        sprintf(s,"%d",n);
        TextOut(hdc,10,10,s,strlen(s));
        MoveToEx(hdc,t1.a.x,t1.a.y,NULL);
          LineTo(hdc,t1.b.x,t1.b.y);
          LineTo(hdc,t1.c.x,t1.c.y);
          LineTo(hdc,t1.a.x,t1.a.y);
        MoveToEx(hdc,t2.a.x,t2.a.y,NULL);
          LineTo(hdc,t2.b.x,t2.b.y);
          LineTo(hdc,t2.c.x,t2.c.y);
          LineTo(hdc,t2.a.x,t2.a.y);
        k=getch();
        if (k==27) break;
        n++;
        rect.left=0;
        rect.top=0;
        rect.right=300;
        rect.bottom=300;
        FillRect(hdc, &rect, hbrush);
    }
    DeleteObject(hbrush);