how to create Duval Triangle in canvas

后端 未结 2 1315
清酒与你
清酒与你 2020-12-16 07:04

I need to create a triangle which called a duval triangle. It looks like this:

I need to do it with canvas. so far I succeed to create a triangle. But I don\'t know

2条回答
  •  清歌不尽
    2020-12-16 07:22

    The final answer(all credits to @markE for his greater efforts)

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    
    // https://www.researchgate.net/publication/4345236_A_Software_Implementation_of_the_Duval_Triangle_Method
    
    var v0={x:114,y:366};
    var v1={x:306,y:30};
    var v2={x:498,y:366};
    var triangle=[v0,v1,v2];
    
    // Define all your segments here
    var segments=[
      { 
        points:[{x:114,y:366},{x:281,y:76},{x:324,y:150},{x:201,y:366}],
        fill:'rgb(172,236,222)',
        label:{text:'D1',cx:200,cy:290,withLine:false,endX:null,endY:null},
      },
      { 
        points:[{x:385,y:366},{x:201,y:366},{x:324,y:150},{x:356,y:204},{x:321,y:256}],
        fill:'deepskyblue',
        label:{text:'D2',cx:290,cy:290,withLine:false,endX:null,endY:null},
      },
      { 
        points:[{x:297,y:46},{x:392,y:214},{x:372,y:248},{x:441,y:366},{x:385,y:366},{x:321,y:256},{x:356,y:204},{x:281,y:76}],
        fill:'lightCyan',
        label:{text:'DT',cx:370,cy:290,withLine:false,endX:366,endY:120},
      },
      { 
        points:[{x:306,y:30},{x:312,y:40},{x:300,y:40}],
        fill:'black',
        label:{text:'PD',cx:356,cy:40,withLine:true,endX:321,endY:40},
      },
      { 
        points:[{x:312,y:40},{x:348,y:103},{x:337,y:115},{x:297,y:46},{x:300,y:40}],
        fill:'navajoWhite',
        label:{text:'T1',cx:375,cy:70,withLine:true,endX:340,endY:75},
      },
      { 
        points:[{x:348,y:103},{x:402,y:199},{x:392,y:214},{x:337,y:115}],
        fill:'tan',
        label:{text:'T2',cx:400,cy:125,withLine:true,endX:366,endY:120},
      },
      { 
        points:[{x:402,y:199},{x:498,y:366},{x:441,y:366},{x:372,y:248}],
        fill:'peru',
        label:{text:'T3',cx:425,cy:290,withLine:false,endX:null,endY:null},
      },
    ];
    
      // label styles
      var labelfontsize=12;
      var labelfontface='verdana';
      var labelpadding=3;
    
      // pre-create a canvas-image of the arrowhead
      var arrowheadLength=10;
      var arrowheadWidth=8;
      var arrowhead=document.createElement('canvas');
      premakeArrowhead();
    
      var legendTexts=['PD = Partial Discharge','T1 = Thermal fault < 300 celcius','...'];
    
    
    // start drawing
    /////////////////////
    
    
    // draw colored segments inside triangle
    for(var i=0;i
    body{ background-color: ivory; padding:10px; }
    #canvas{border:1px solid red; margin:0 auto; }

提交回复
热议问题