如何确定一个点是否在三角形内

时间:2019-12-02 14:15:17

标签: matlab

程序说明如下:

我从文件中获取3个坐标,然后绘制了一个三角形

我想绘制一个网格,如果网格点位于三角形中,我想绘制一个黑色圆圈,否则要绘制一个红色圆圈。

我用来检查点是否在三角形内的方法是,如果点(xco,yco)在三角形内,则它与其他三个点构成的小三角形的面积之和等于的面积。三角形。

所以我的if语句是总面积=三角形的面积->绘制黑色圆圈,否则绘制红色圆圈。

问题是,即使某些点使“总面积”等于三角形图的面积,也没有绘制黑色圆圈,而是绘制了红色圆圈。

这似乎是随机的,我无法弄清楚这个简单的问题。

那么您能帮我画出点吗?



figure()



% Loading the data from .mat file
A = load('triangle_a.mat','pt1');
B = load('triangle_a.mat','pt2');
C = load('triangle_a.mat','pt3');

% Assigning values of array from .mat into each variable
x1 = A.pt1(1,1);
y1 = A.pt1(1,2);
x2 = B.pt2(1,1);
y2 = B.pt2(1,2);
x3 = C.pt3(1,1);
y3 = C.pt3(1,2);

% Drawing coordinates of  a triangle on a grid
plot(x1, y1,'or');
hold on
plot(x2, y2,'or');
hold on
plot(x3, y3,'or');
hold on


% Joining three coordinates to make a triangle
plot ([x1,x2],[y1,y2],'-b');
plot ([x1,x3],[y1,y3],'-b');
plot ([x3,x2],[y3,y2],'-b');




xmin = A_coor(1,1);
xmax = B_coor(1,1);
ymin = A_coor(1,2);
ymax = C_coor(1,2);


xgrid = xmin-1:0.5:xmax+1;
ygrid = ymin-1:0.5:ymax+1;

tri_x = [x1 x2 x3];
tri_y = [y1 y2 y3];
area = polyarea(tri_x,tri_y);

% Making a grid 
for x = 1:1:numel(xgrid)
    for y = 1:1:numel(ygrid)

        xco = xgrid(1,x);
        yco = ygrid(1,y);

        aa = [xco, x2, x3];
        bb = [yco, y2, y3];

        cc = [x1, xco, x3];
        dd = [y1, yco, y3];

        ee = [x1,x2,xco];
        ff = [y1,y2,yco];

        area1 = polyarea(aa,bb);
        area2 = polyarea(cc,dd);
        area3 = polyarea(ee,ff);

        totarea = area1 + area2 + area3;

        if totarea == area
            plot(xco,yco,'ok');
        else
            plot(xco,yco,'.r');
        end

    end
end


我更改了制作网格部分的if语句的条件后,我的代码工作了。 (感谢Hoki的建议)

之前

if totarea == area

之后

if abs(area-totarea)<0.002;)

1 个答案:

答案 0 :(得分:3)

您可以使用MATLAB函数inpolygon确定点是否在任意多边形内。

相关问题