首页 > 试题广场 >

编写程序,输入A,B,C,D四个点的坐标,假设A,B,C三点

[问答题]

编写程序,输入A,B,C,D四个点的坐标,假设A,B,C三点可以构成一个三角形,判断D点是否落在三角形内。

最近刚看了这道题,有两个解法:1.如果o点在三角形内部,那么△OAB+△OAC+△OBC=△ABC;2.从A点出发逆时针绕着三角形走,如果O点都是在边的左边,那么O点在三角形内部,否则不在;
发表于 2017-10-13 09:07:28 回复(2)
#include<stdio.h>
#include<math.h>

float distance(float coordinate1[2],float coordinate2[2])
//计算两点之间的距离
{
    float dist,dist_x,dist_y;
    dist_x = (coordinate1[0]-coordinate2[0])*(coordinate1[0]-coordinate2[0]);
    dist_y = (coordinate1[1]-coordinate2[1])*(coordinate1[1]-coordinate2[1]);
    dist=sqrt(dist_x+dist_y);
    return dist;
}

float k(float coordinate[][2],float coordinate[][2])
    //求斜率
{
    float slope;
    slope=(coordinate2[1]-coordinate1[1])/(coordinate2[0]-coordinate1[0]);
    return slope;
}

int main ()
{
    int i=0;
    float num,coordinate[5][2],slope_ad,slope_bc,dist_ad,diat_a_bc,
    e_x,e_y;
    printf("input coordinates of four points:\n")
    for(;i<4;i++){
        printf("input the coordinate of point %d",i+1);
        scanf("%f %f",&coordinate[i][0],&coordinate[i][1]);
    }
    slope_ad=k(coordinate[0][],coordinate[3][]);
    slope_bc=k(coordinate[1][],coordinate[2][]);
    e_x=(-coordinate[1][0]+coordinate[1][1]/slope_bc+
         slope_ad/slope_bc*coordinate[0][0]-coordinate[0][1])/(slope_ad/slope_bc-1);
    e_y=slope_ad*(e_x-coordinate[0][0])+coordinate[0][1];
    coordinate[4][0]=e_x;
    coordinate[4][1]=e_y;
    dist_ad=distance(coordinate[0][],coordinate[3][]);
    dist_a_bc=distance(coordinate[0][],coordinate[4][]);
    if(diat_ad>diat_a_bc)
        printf("d is outside the triangle\n");
    else
        printf("d is not outside the triangle\n");
    return 0;
}

发表于 2021-11-29 21:58:01 回复(1)
用极坐标的方式表示点就可以了
发表于 2019-07-13 22:12:03 回复(0)
ABC构成三角形,根据D点计算;∠ADC ∠BDC ∠ADB的和,如果D点在三角形内部,角度和为360度,如果D在三角形外部,角度和为最邻近边两点角度和的2倍(即D点最接近AB段,则ADB=ADC+BDC,且∠ADB小于180度,2∠ADB小于360度),不为360度。
发表于 2017-10-13 10:34:26 回复(2)