Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何确定点是否在三角形内_Matlab - Fatal编程技术网

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

Matlab 如何确定点是否在三角形内,matlab,Matlab,项目说明如下: 我从一个文件中取了3个坐标,画了一个三角形 我想画一个网格,如果网格点在三角形中,我想画一个黑色的圆,否则就是红色的圆 我用来检查点是否在三角形内的方法是,如果点(xco,yco)在三角形内,它与其他三个点形成的小三角形的面积之和等于三角形的面积 所以我的if语句是如果总面积=三角形的面积->绘制黑圈,否则绘制红圈 问题是,即使某些点使总面积等于三角形打印区域的面积,黑色圆圈未打印,而红色圆圈已打印 它看起来是随机的,我无法解决这个简单的问题 你能帮我画点吗 figure()

项目说明如下:

我从一个文件中取了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
之后


如果abs(area-totarea)您可以使用MATLAB函数确定点是否位于任意多边形内。

我怀疑这与数值公差有关,特别是来自函数
polyarea
对于非常接近三角形边的点。可以尝试不使用纯粹的相等,但查找给定的公差是否仍适用于您的情况(如
if abs(面积与面积)它确实有效!!!非常感谢!很高兴它对您有效。也许您可以在这里的答案中解释并展示您实施的有效解决方案。这样,与您有相同问题的人将得到更直观的答案;-)
if abs(area-totarea)<0.002;)