DiagramRender.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.hb.proj.diagram.diagnose;
  2. import java.awt.BasicStroke;
  3. import java.awt.Color;
  4. import java.awt.Graphics2D;
  5. import java.awt.geom.Line2D;
  6. import java.util.List;
  7. /**
  8. * 功图绘制,用于功图诊断,作为被诊断对象、标准功图
  9. * 只需要闭合曲线,其他不需要绘制
  10. * 功图诊断时,最好标准功图和待诊断功图出自同一绘制方法、同大小
  11. * @author cwen
  12. *
  13. */
  14. public class DiagramRender {
  15. private Color canvasColor;
  16. private int canvasWidth;
  17. private int canvasHeight;
  18. private int originX ; //原点x值
  19. private int originY ; //原点y值
  20. private int xAxisEnd;
  21. private int yAxisEnd;
  22. private double xMinValue;
  23. private double yMinValue;
  24. private double xMaxValue;
  25. private double yMaxValue;
  26. private double xRatio;
  27. private double yRatio;
  28. public DiagramRender(){
  29. this(360,180);
  30. }
  31. public DiagramRender(int canvasWidth,int canvasHeight){
  32. this.canvasWidth=canvasWidth;
  33. this.canvasHeight=canvasHeight;
  34. this.canvasColor=new Color(255,255,255);
  35. this.originX=10;
  36. this.originY=canvasHeight-10;
  37. this.xAxisEnd=canvasWidth-10;
  38. this.yAxisEnd=10;
  39. this.xMaxValue=3;
  40. this.xMinValue=0;
  41. this.yMaxValue=50;
  42. this.yMinValue=0;
  43. }
  44. public void draw(Graphics2D g2,List<Double> disps,List<Double> oths,double stroke,double maxOth,double minOth) {
  45. this.xMinValue=0;
  46. this.xMaxValue=Math.ceil(stroke);
  47. this.yMinValue=Math.floor(minOth); //定格画,避免井的个体特性影响相似性判断,相当于各类图缩放在一个区域内
  48. this.yMaxValue=Math.ceil(maxOth);
  49. this.xRatio=(this.xAxisEnd-this.originX)/(this.xMaxValue-this.xMinValue);
  50. this.yRatio=(this.originY-this.yAxisEnd)/(this.yMaxValue-this.yMinValue);
  51. this.drawCanvas(g2);
  52. //this.drawCoordinate(g2);
  53. this.drawCurve(g2, disps, oths);
  54. }
  55. /**
  56. * 绘制画布
  57. * @param g2
  58. */
  59. public void drawCanvas(Graphics2D g2){
  60. g2.setColor(this.canvasColor);
  61. g2.fillRect(0, 0, this.canvasWidth, this.canvasHeight);
  62. }
  63. /**
  64. * 简易坐标轴
  65. * @param g2
  66. */
  67. public void drawCoordinate(Graphics2D g2) {
  68. g2.setStroke(new BasicStroke(1));
  69. g2.setColor(new Color(212,212,212));
  70. g2.drawLine(this.originX, this.originY, this.originX, this.yAxisEnd); //y 轴
  71. g2.drawLine(this.xAxisEnd, this.originY, this.xAxisEnd, this.yAxisEnd); //y border
  72. g2.drawLine(this.originX, this.yAxisEnd, this.xAxisEnd, this.yAxisEnd); //x border
  73. g2.drawLine(this.originX, this.originY,this.xAxisEnd,this.originY); //x bottom-border
  74. int yGirdCount=5;
  75. double yGridDivide=(this.originY-this.yAxisEnd)/yGirdCount;
  76. double tempy=0;
  77. for(int i=1;i<yGirdCount;i++) {
  78. tempy=this.originY-i*yGridDivide;
  79. g2.draw(new Line2D.Double(this.originX, tempy, this.xAxisEnd,tempy));
  80. }
  81. }
  82. /**
  83. * 绘制曲线
  84. * @param g2
  85. * @param disps
  86. * @param oths
  87. */
  88. public void drawCurve(Graphics2D g2,List<Double> disps,List<Double> oths) {
  89. g2.setStroke(new BasicStroke(1));
  90. g2.setPaint(new Color(0,0,0));
  91. double ptx=getX(disps.get(0)),pty=getY(oths.get(0));
  92. double nptx=0,npty=0;
  93. for(int i=1,len=disps.size(),len2=oths.size();i<len && i<len2;i++) {
  94. nptx=getX(disps.get(i));
  95. npty=getY(oths.get(i));
  96. g2.draw(new Line2D.Double(ptx, pty, nptx,npty));
  97. ptx=nptx;
  98. pty=npty;
  99. }
  100. nptx=getX(disps.get(0));
  101. npty=getY(oths.get(0));
  102. g2.draw(new Line2D.Double(ptx, pty, nptx,npty));
  103. }
  104. private double getX(double val) {
  105. return this.originX+(val-this.xMinValue)*this.xRatio;
  106. }
  107. private double getY(double val) {
  108. return this.originY-(val-this.yMinValue)*this.yRatio;
  109. }
  110. }