【问题标题】:How to determine if a point is inside a triangle如何判断一个点是否在三角形内
【发布时间】:2019-12-02 14:15:17
【问题描述】:

程序说明如下:

我从一个文件中取 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;)

【问题讨论】:

  • 我怀疑这与数值公差有关,特别是来自函数polyarea 用于非常接近三角形边缘的点。可能尽量不要使用纯相等,但要查找给定的容差是否仍然适用于您的情况(例如if abs(area-totarea)&lt;tolerance;)
  • 它确实有效!非常感谢!
  • 很高兴它为您工作。也许您可以在此处的答案中解释并展示您实施的工作解决方案。这样,与您有相同问题的人将得到更明显的答案;-)

标签: matlab


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2011-10-30
    • 2013-04-24
    • 2017-02-01
    相关资源
    最近更新 更多