精华内容
下载资源
问答
  • 程序说明如下:我从一个文件中获取了3个坐标,并绘制了一个三角形我想绘制一个网格,如果网格点在三角形中,我想绘制一个黑色圆圈,否则要绘制一个红色圆圈。我用于检查点是否在三角形内的方法是,如果点(xco,yco)...

    程序说明如下:

    我从一个文件中获取了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(xgrid) 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

    更多&回答...

    展开全文
  • 1.找到这两个三角行的法向量(三点确定一个平面,确定其法线向量) 2.根据法向量计算这两个三角形法向量的各个相差角度(计算三个轴的旋转角度) 3.找出三角形质心点(得到偏移距离) 4.建立旋转,偏移矩阵,根据矩阵得...
  • 如何判断一个点在三角形内部

    万次阅读 2016-05-17 15:31:04
    如何判断一个点在三角形内部基本思路如图,点P在三角形ABC内部,可以通过以下三个条件判断...下面将会用到叉乘这个数学工具来确定一个点在直线的哪一侧。判断点在直线的哪一侧叉乘是一个判断点在直线哪一侧的数学工具。

    如何判断一个点在三角形内部

    基本思路

    三角示例

    如图,点P在三角形ABC内部,可以通过以下三个条件判断:

    1. 点P和点C在直线AB同侧
    2. 点P和点B在直线AC同侧
    3. 点P和点A在直线BC同侧

    如果以上三个条件同时满足,则点P在三角形ABC内部。

    下面将会用到叉乘这个数学工具来确定一个点在直线的哪一侧。

    判断点在直线的哪一侧

    叉乘是一个判断点在直线哪一侧的数学工具。先看一下叉乘的定义:

    a⃗ ×b⃗ =a⃗ b⃗ sinθn⃗ 

    其中,θ为向量夹角,n⃗ 是一个向量,与a⃗ b⃗ 都垂直,方向满足右手螺旋法则,即下图所示:

    右手螺旋法则

    于是,从第一个向量的方向看,如果第二个向量在左边,那个叉乘是正的,在右边,则是负的,在同一个方向上,则是0.叉乘的大小,则是两个向量组成的平行四边形的面积。

    那么叉乘具体如何计算呢?先将x、y、z轴方向的单位向量分别记为i⃗ j⃗ k⃗ ,则如果有两个向量,分别为:

    u⃗ =u1i⃗ +u2j⃗ +u3k⃗ =(u1,u2,u3)v⃗ =v1i⃗ +v2j⃗ +v3k⃗ =(v1,v2,v3)

    则有:
    u⃗ ×v⃗ =(u2v3u3v2)i⃗ +(u3v1u1v3)j⃗ +(u1v2u2v1)k⃗ 

    可以用以下行列式来简记:
    u⃗ ×v⃗ =i⃗ u1v1j⃗ u2v2k⃗ u3v3

    如果叉乘的两个向量都是平面向量,则可以看作是第三个分量为0的三维向量。

    以下Processing程序可以验证叉乘用于点在直线哪一侧的判断的正确性:

    PVector a = new PVector(100, 200);
    PVector b = new PVector(300, 300);
    PVector c = PVector.sub(b, a);
    
    void setup() {
      size(400, 400);
      fill(0);
    }
    
    void draw() {
      background(255);
      line(a.x, a.y, b.x, b.y);
      PVector d = new PVector(mouseX - a.x, mouseY - a.y);
    
      String side;
      if (c.cross(d).z > 0)
        side = "left";
      else if (c.cross(d).z < 0)
        side = "right";
      else
        side = "on";
      text(side, 40, 40);
    }

    有兴趣的读者也可以把cross方法展开试试。

    算法实现

    现在算法已经很明显啦!其中有一点小技巧,三角形的三个顶点是转着来的,算一次就行了。比如,在上图中,点C在直线AB左侧,点B在直线CA的左侧,点A在直接BC的左侧。所以,第一步是先计算三角形的方向:

    float signOfTrig = (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x);

    注意这样一下子写出来不太容易看明白,但是如果看成向量AB和向量AC叉乘之后的Z坐标就好懂的多了。

    再分别计算P在AB、CA、BC的哪一侧:

    float signOfAB = (b.x - a.x)*(p.y - a.y) - (b.y - a.y)*(p.x - a.x);
    float signOfCA = (a.x - c.x)*(p.y - c.y) - (a.y - c.y)*(p.x - c.x);
    float signOfBC = (c.x - b.x)*(p.y - c.y) - (c.y - b.y)*(p.x - c.x);

    最后判断它们是否在同一侧:

    boolean d1 = (signOfAB * signOfTrig > 0);
    boolean d2 = (signOfCA * signOfTrig > 0);
    boolean d3 = (signOfBC * signOfTrig > 0);
    println(d1 && d1 && d3);

    这就是所有的算法了!最后来个程序验证一下。

    验证程序

    PVector[] trig;
    float r = 150;
    float t = 0;
    float interval = 30;
    
    void setup() {
      size(500, 500);
      trig = new PVector[3];
      ellipseMode(CENTER);
    }
    
    void draw() {
      translate(width/2, height/2);
      updateTrig();
      background(0);
      stroke(255);
      line(trig[0].x, trig[0].y, trig[1].x, trig[1].y);
      line(trig[1].x, trig[1].y, trig[2].x, trig[2].y);
      line(trig[0].x, trig[0].y, trig[2].x, trig[2].y);
    
      noStroke();
      for (float i = -width/2 + interval/2; i < width/2; i += interval) {
        for (float j = -height/2 + interval/2; j < height/2; j += interval) {
          if (inTrig(i, j)) {
            fill(255, 0, 0);
          } else {
            fill(255);
          }
          ellipse(i, j, 2, 2);
        }
      }
      t += 0.5;
    }
    
    void updateTrig() {
      for (int i = 0; i < 3; i++)
        trig[i] = new PVector(r * cos(radians(i * 120 + t)), r * sin(radians(i * 120 + t)));
    }
    
    boolean inTrig(float x, float y) {
      PVector a = trig[0];
      PVector b = trig[1];
      PVector c = trig[2];
      PVector p = new PVector(x, y);
    
      float signOfTrig = (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x);
      float signOfAB = (b.x - a.x)*(p.y - a.y) - (b.y - a.y)*(p.x - a.x);
      float signOfCA = (a.x - c.x)*(p.y - c.y) - (a.y - c.y)*(p.x - c.x);
      float signOfBC = (c.x - b.x)*(p.y - c.y) - (c.y - b.y)*(p.x - c.x);
    
      boolean d1 = (signOfAB * signOfTrig > 0);
      boolean d2 = (signOfCA * signOfTrig > 0);
      boolean d3 = (signOfBC * signOfTrig > 0);
    
      return d1 && d2 && d3;
    }
    

    效果如下:

    效果

    展开全文
  • Java基础:打印一个三角形 所谓的打印三角形,无非就是利用一些字符,按照形状进行组合。下面就来分析一下如何用代码的形式实现。 分析部分 以打印五行三角形为例,首先我们来想想这个三角形是怎么实现的。我们...

    Java基础:打印一个三角形


    所谓的打印三角形,无非就是利用一些字符,按照形状进行组合。下面就来分析一下如何用代码的形式实现。


    分析部分

    以打印五行三角形为例,首先我们来想想这个三角形是怎么实现的。我们常规接触的到的三角形,可以是以下这种样式。
    在这里插入图片描述
    我们想要实现上面这种图形,对于刚接触到Java基础的人来说,乍一看没有什么头绪。我们不妨换个思路。
    在这里插入图片描述
    我们把三角形想象成已经放在了console的窗口里面,把它分割成四个部分,我们来进行逐个打印。
    我们通过一个for循环作为外循环,功能是确定我们要打印三角形的行数。代码如下:

    public class Test1 {
        public static void main(String[] args) {
            for (int i = 1; i <= 5; i++) {
            
            }
        }
    }
    

    接着我们来打印左边的倒三角,使用一个for循环,初始值 j 为5,当 j 大于等于 i 时,打印一个空格,传递的数值 j 就减少1,程序按顺序结构往下走:(可以在打印语句里加入字符来判断是否打印成功)
    在这里插入图片描述

    public class Test1 {
        public static void main(String[] args) {
            for (int i = 1; i <= 5; i++) {
                for (int j = 5; j >=i ; j--) {
                    System.out.print(" ");
                }
                System.out.println();
            }
        }
    }
    

    在这里插入图片描述


    我们再来打印第二部分的半个三角形,使用一个for循环,当跳出上面的循环时,进入该循环,初始值为1,当 j 小于等于 i 时,打印一个 * ,传送该循环的数值 j 就增加1,程序按顺序结构往下走:

    public class Test1 {
        public static void main(String[] args) {
            for (int i = 1; i <= 5; i++) {
                for (int j = 5; j >=i ; j--) {
                    System.out.print(" ");
                }
                for (int j = 1; j <=i; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    }
    

    运行结果


    最后我们打印剩下的半边三角形,使用一个for循环,当 j 小于 i 时,打印一个 * ,传递的数值 j 就减少1,运行结束后回到外循环:

    public class Test1 {
        public static void main(String[] args) {
            for (int i = 1; i <= 5; i++) {
                for (int j = 5; j >=i ; j--) {
                    System.out.print(" ");
                }
                for (int j = 1; j <=i; j++) {
                    System.out.print("*");
                }
                for (int j=1;j<i;j++){
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    }
    

    在这里插入图片描述
    这样,一个三角形就在分步的操作下打印完成了。


    可能会出现的问题(要点)

    1. 每个内循环里面,打印语句的方法是print(),不是println(),如果是后者我们每打印一次就会换行,就构不成三角形了。
    2. 外循环里面除了三个内循环以外,还有一句换行语句——System.out.println(),等到所有的内循环都运行一遍的时候,就会换行,然后才回到外循环来打印下一行的数据。
    3. 第三个循环里,判定条件是 j < i ,这里不可以设置成小于等于,不然我们打印的就是一个上底边为2的梯形。

    一些题外话

    本博客的学习来自b站——狂神说Java的课程讲解,如果觉得本文章对你有帮助,可以去看看我的老师,这是个宝藏男孩儿,他的课程都是通俗易懂的。

    狂神说Java的B站个人空间链接 点这里
    狂神老师的Java基础教程链接 点这里

    展开全文
  • 从古至今,尺规作图一直是数学中备受关注的一个问题。到现在,数学家们已经比较完美的解决了尺规作图的问题,指出哪些图形可以用尺规作图完成,哪些问题不能用尺规作图解决。Mohr-Mascheroni定理告诉了我们一个非常...
    
    			

        从古至今,尺规作图一直是数学中备受关注的一个问题。到现在,数学家们已经比较完美的解决了尺规作图的问题,指出哪些图形可以用尺规作图完成,哪些问题不能用尺规作图解决。Mohr-Mascheroni定理告诉了我们一个非常令人吃惊的事实:所有用直尺和圆规可以解决的作图问题,只用圆规也能完成。当然,只用圆规是画不出直线的;但我们可以认为,一条直线已经由两点确定,并不需要画在图上。数学家们向我们展示了:给定四个点,如何用单规找出它们所确定的两条直线的交点;给定一段圆弧和两个点,如何找出两点确定的直线与圆弧的交点。注意到这是直尺仅有的功用,用单规全部解决了后直尺也就不需要了。数学家们还研究过单尺作图:只拿一块直尺到处作直线交过来交过去的又能完成哪些作图问题。显然,只用直尺是不能开平方的,解析几何告诉我们直线与直线的交点只可能是各系数的一个有理表达,这决定了单尺作图不能替代尺规作图。Poncelet-Steiner定理告诉我们,假如事先给定了一个圆和它的圆心,以后只用直尺足以完成任何尺规作图能够解决的问题。这些将在我今后的《什么是数学》笔记中提到。
        昨天,网友浅海里的鱼跟我提到了锈规作图问题,这是我第一次听到这个神奇的东西。现在,假设我们没有直尺,只有一把生锈的圆规。圆规已经被卡住了,只能画出单位半径的圆。在这样的条件下,哪些作图问题仍然能够被解决?锈规作图相当的困难,但并不是没有可能。1983年,D. Pedoe教授惊奇地发现,给定两个点A和B,如果它们的距离小于2,我们可以非常简单地作出点C,使得AC = BC = AB(即△ABC为等边三角形)。

        
        先以A、B为圆心分别作圆。由于它们之间的距离小于2,因此两圆必然相交。以其中一个交点P为圆心作圆,分别交圆A、圆B于点M、N。最后,圆M和圆N的交点即为所求点C。由对称性,△CAB一定是一个等腰三角形。另外,由对称性可知∠ACB=2∠BCP,而圆周角∠BCP的角度又是圆心角∠BNP的一半。由于△BNP是等边三角形,我们可以立即得到∠ACB=∠BNP=60°,△ABC是一个等边三角形。
        D. Pedoe受到启发,提出了以下问题:任给A、B两点,只用锈规是否都能作出C使得AC = BC = AB?若干年后,侯晓荣等人巧妙地解决了这个问题,并以此为基础,借用复数运算等理论,得到了一个出人意料的结论:从给定两点出发,任何尺规作图能够完成的构造,只用锈规也能完成。只用锈规作等边三角形的方法相当精彩,我在这里详细地说一下。觉得牛B的话就在下面叫个“好”。

        
        首先,我们介绍锈规的第一个比较明显的用途:找出给定两点A、B的一条由单位长线段首尾相接构成的折线段。方法不用多说,看上边这个图,从圆A上的任一点出发,我们能够用锈规不断画圆找交点,作出排列成等边三角形的点阵。总有一个时候,会有某个圆与圆B相交,此时我们所需要的折线段也就找到了。
        
        给出A、B、C三点,我们可以利用这种折线段巧妙地作出平行四边形ABDC。首先作出从A到B的折线段,再作出从A到C的折线段,然后顺次作出一个个边长为1的菱形,最终得到的点D就是所求的点。只需注意到菱形都是平行四边形,则四边形ABDC显然是一个平行四边形。

                 
        好了,我们已经慢慢地接近我们的目标了。考虑这样一个作图问题:已知等边△PAB和等边△PCD,能否只用锈规找出点E,使得BDE也是一个等边三角形?事实上,这个E点恰好就是使得四边形APCE为平行四边形的那个点,借助上面的方法我们可以轻易作出E点的位置。利用最初等的平面几何知识,我们可以得出,如果APCE是平行四边形,则△BDE必然是一个等边三角形。这个证明相当简单,我们把证明的任务留给大家自己去完成。
        有人反应过来了吗?我们的问题已经圆满的解决了!!回到我们最初的问题,给定A、B两点后,我们可以作出一条由单位长线段构成的折线A - P1 - P2 - ... - Pn - B,进而作出n+1个边长为1的等边三角形。然后,一次次套用作平行四边形的方法,作出T1, T2, ...等一系列的点,不断将两个小的等边三角形合成一个大的三角形。最后的Tn就是我们所求的C点,它使得△ABC恰为一个等边三角形。

    做人要厚道 转贴请注明出处

    展开全文
  • 假设您给出了一个直角三角形的斜边,那么如何确定给定的斜边是否有两个可能的整体较小的边.例如,你被赋予斜边为5.然后你必须确定给定的直角三角形是否有较小的整数边.答案是肯定的,因为我们可以将较小的边用作3和4,...
  • 对于点的路径变化,直接建好模版,下次替换数据便可以,但是对于面的话,虽然官网也提供了例子(CZML Polygon - Interpolating References),但是过于简单,只是一个三角形面变化的过程。所以,当考虑实际情况的话...
  • 软件,仔细想想,无非就两命令,是直线命令,二,就是圆。直线,无非也就是两种,,是水平直线和垂直于水平直线的竖线,二,就是各种斜线。第种直线,直接画,输入尺寸,就哦了。而斜线呢?仔细想想,是...
  • 3个反光柱的摆放规则:摆成一个直角三角形,直角边不同即可,可以设置边的长度来作为附加特征。 原理:检测3个顶点的角度,检测到是直角时可以确定该点是landmark坐标系的原点。然后根据长边和短边来确定坐标系的x轴...
  • 比如有一个图形,需要我们去测试它是三角形,从 S 的角度出发,我们分析一下: 三角形必须由三条边构成,三条边的夹角之和必须等于 180 度; 因此我们的测试点可以从该图形边数之和是否为 3,边的夹角之和是否为 180...
  • 题目描述: 思路:动态规划!...每行第一个元素都是上一行第一个元素确定的。那么只需要在每行进行时候进行从大到小确认每个元素就可以用一个数组得到结果。要注意的是每行第一个元素一定是要最后改变。 class
  • 引用类型变量是如何实现多态的_Java语言程5.7.1 引用类型变量是如何实现多态的一个对象只有一种形式,没有什么不确定的,这是由于构造方法所明确决定的。但是对象的引用类型变量具有多态性。在存在父子关系继承的...
  • 特约作者:河北 李紫菡简单多面体的外接球问题是立体几何中的难点也是重要的考点,此类问题最能有效考查考生的空间想象能力,自然受到命题者的青睐.有些同学对于此类问题的解答...、由球的定义确定球心若一多...
  • 动态规划-数字三角形

    2019-09-11 18:51:42
    一个由非负整数组成的三角形(由二维数组构成),第一行只有一个数,除了最下行之外的每个数的左下方右下方各有一个数。从第一行的数开始,每次可以往左下或者右下方走一格,直到走到最下行,把沿途经过的数全部加...
  • 数学中有不少公式,有些同学...我们首先要知道三角形的内心是如何确定的,三角形的内心是三角角平分线的交点,内心到三角形三边的距离相等,那么怎么得到一般三角形内切圆的半径呢?其实,我们可以借助等面积法来...
  • 如何确定关键高度才能使每两个关键高度之间分割出的图形易于计算呢?    关键高度有:三角形底边高度、三角形上顶点高度、三角形交点的高度。   ​ 如此分割,我们会发现,相邻两条扫描线之间的图形,是一个梯形...
  • 1巧用记号线素描和其他画种一样,当你经过对物象的观察和...也有的时候,为了把物体的比例和位置画准确,往往在画面上先用线画一个三角形,或长方形、或正方形、或椭圆形、或别的形状。2理解轮廓线①外轮廓线:当小...
  • 其实原理比较简单,如下图是一个平底三角形,V2.y==V3.y,所以我们只要沿着三角形的两条边不断画直线,就可以将三角形填满。首先我们必须确定每条直线的左右两个点,即$V_L和V_R$,我们可以通过插值法确定,例如$V_L...
  • 这一讲的立体几何题主要在于一个小技巧:如何用向量表示点在平面三角形内部,其基本原理是向量基本定理。题目如下:可以很容易确定下来P点的位置,并如下图建立立体直角坐标系。第二小题的关键在于如何确定三角形PCD...
  • 如何确定一个近平面的 l(left) , r(right) , b(bottom) , t(top)四个面?通常使用竖直可视角度(vertical field-of-view , fovY)和长宽比(aspect ration)来确定 fovY就是链接Camera底面的中点和顶面的中点所成的...
  • 先上图: 由于使用了float浮动,三角形下方的一块...(这真是一个垃圾的方法啊) 再上代码: HTML <div class="dropdown"> <a href="#" class="dropbtn">Login</a> <div class="dro...
  • - 试试把gameobject 一个一个禁用,确定下什么最影响性能 - stats 里面有多少个 Draw calls & 三角形 - 合并网格物体 - 合并材质张数 - 不要用网格碰撞. - Unity对带动作的模型渲染消耗比较大,如果是...
  • 尽管利用通用GPU进行计算很有发展前景,但传统图像应用编程接口仍然将GPU抽象成一个包括纹理、三角形和像素在内的图像绘制器。寻找一种能够使用这些基本元素的映射算法并不是一项简单的操作,即便对最先进的图形开发...
  • 自动化工程师在构建工厂生产线时,对一个PROFINET IO系统只需要选择同样一致性类别的设备,选择流程如下图所示,当流程进行到一个圆圈所示的步骤时说明选择结束,可以确定设备所属的一致性类别。其实每次我看到这幅...
  • 计算几何() by 邓俊辉老师

    千次阅读 2019-08-07 21:11:34
    每三个点(P、Q、R)确定一个三角形如何判断第四个点,落在三角形内部还是在三角形外部。 正确且简洁的办法。 做一条射线,穿越奇数词(odd)在内部;穿越偶数次(even 0,2)在外部。 要用到分而治之和...
  • 首先,谈谈为什么数学要引入坐标系?坐标的本质是为了方便地...例如,把一个三角形置于坐标系中,确定三角形的三个顶点坐标后,可以应用两点距离公式方便地计算边长、面积等。在平面直角坐标系中,y=kx+b表示直线...
  • 首先我们使用一个成绩表数据来说明sumif函数在Excel...然后就会快速的插入到一个求平均值的函数,我们可以确认下数据的区域,如果没问题,直接点击【确定】,即可得出平均分数。后续的,只要按照这个公式进行拉选...
  • 八年级数学下册:什么是函数,函数如何解决实际问题函数一、定义:如果有两个变量x与y,对于x的每一个确定的值,y都有唯一的值与其对应,那么y是x的函数。1、判断下列哪些是函数,哪些不是函数y=2x y=3x-4 y= y= y=x...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 121
精华内容 48
关键字:

如何确定一个三角形