Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.14 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package zad6;
  7.  
  8. /**
  9. *
  10. * @author troll
  11. */
  12. /*
  13. * To change this license header, choose License Headers in Project Properties.
  14. * To change this template file, choose Tools | Templates
  15. * and open the template in the editor.
  16. */
  17. import static zad6.Zad6.jb;
  18. import static zad6.Zad6.jp;
  19. import java.awt.Color;
  20. import java.awt.Cursor;
  21. import java.awt.Dimension;
  22. import java.awt.FlowLayout;
  23. import java.awt.Graphics;
  24. import java.awt.Graphics2D;
  25. import java.awt.Image;
  26. import java.awt.event.ActionEvent;
  27. import java.awt.event.ActionListener;
  28. import java.awt.event.MouseEvent;
  29. import java.awt.event.MouseListener;
  30. import java.awt.event.MouseMotionListener;
  31. import java.awt.geom.Ellipse2D;
  32. import java.awt.geom.Rectangle2D;
  33. import java.awt.image.BufferedImage;
  34. import java.util.ArrayList;
  35. import javax.swing.JButton;
  36. import javax.swing.JFileChooser;
  37. import javax.swing.JFrame;
  38. import javax.swing.JPanel;
  39.  
  40. /**
  41. *
  42. * @author Pawel
  43. */
  44. class MyPanel extends JPanel implements MouseListener, MouseMotionListener {
  45.  
  46. static ArrayList<Integer> xPoints, yPoints, x, y, pointsListX, pointsListY;
  47. static ArrayList<Rectangle2D.Double> shapes;
  48. int startX = 0, startY = 0, endX, endY;
  49. int index = 0, pos = -1;
  50. boolean needClear = false;
  51. double step = 0.01;
  52.  
  53. public static double countNewton(double n, int k) {
  54. double Wynik = 1; // Deklaracja zmiennych
  55. int i;
  56.  
  57. for (i = 1; i <= k; i++) // Od 1 do k wykonujemy :
  58. {
  59. Wynik = Wynik * (n - i + 1) / i; // Obliczanie ze wzoru iteracyjnego
  60. }
  61.  
  62. return Wynik; // Zwróć Wynik
  63. }
  64.  
  65. public void bezierFunc(int degree, int pointsCounter) {
  66. for (double p = 0; p <= 1; p += step) {
  67. double xPoint = 0;
  68. for (int i = 0; i <= degree; ++i) {
  69. double Newton = countNewton(degree, i); //Obliczamy wartość współczynnika Newtona
  70. double ti = Math.pow(p, i); //Pierwszy element wzoru t do potęgi i-tej
  71. double lti = Math.pow((1 - p), (degree - i)); //Drugi element wzoru (1-t) do potęgi (ni)
  72. xPoint = xPoint + (Newton * ti * lti * x.get(i)); //Tworzymy składową x-ową
  73. }
  74. if (xPoint > x.get(pointsCounter - 1)) {
  75. break;
  76. }
  77.  
  78. xPoints.add((int) xPoint);
  79. double yPoint = 0;
  80. for (int i = 0; i <= degree; ++i) {
  81. double yNewton = countNewton(degree, i);
  82. double yti = Math.pow(p, i);
  83. double ylti = Math.pow((1 - p), (degree - i));
  84. yPoint = yPoint + (yNewton * yti * ylti * y.get(i));
  85. }
  86. yPoints.add((int) yPoint);
  87. }
  88. }
  89.  
  90. public MyPanel() {
  91. this.addMouseListener(this);
  92. this.addMouseMotionListener(this);
  93. pointsListX = new ArrayList<>();
  94. pointsListY = new ArrayList<>();
  95. shapes = new ArrayList<>();
  96. xPoints = new ArrayList<>();
  97. yPoints = new ArrayList<>();
  98. x = new ArrayList<>();
  99. y = new ArrayList<>();
  100. jb.addActionListener(new ActionListener() {
  101. @Override
  102. public void actionPerformed(ActionEvent e) {
  103. needClear = true;
  104. try {
  105. bezierFunc(x.size() - 1, x.size());
  106. } catch (ArrayIndexOutOfBoundsException abc) {
  107. }
  108. repaint();
  109. }
  110. });
  111. }
  112.  
  113. @Override
  114. public void paintComponent(Graphics g) {
  115. super.paintComponent(g);
  116. Graphics2D g2 = (Graphics2D) g;
  117. if (pointsListX.size() > 0) {
  118. for (int a = 0; a < shapes.size(); a++) {
  119. g2.fill(shapes.get(a));
  120. }
  121. }
  122. int[] xs, ys;
  123. xs = new int[xPoints.size()];
  124. ys = new int[yPoints.size()];
  125. for (int a = 0; a < xPoints.size(); a++) {
  126. xs[a] = xPoints.get(a);
  127. ys[a] = yPoints.get(a);
  128. }
  129. g.drawPolyline(xs, ys, xPoints.size());
  130. g.dispose();
  131. }
  132.  
  133. @Override
  134. public void mouseClicked(MouseEvent e) {
  135. }
  136.  
  137. @Override
  138. public void mousePressed(MouseEvent e) {
  139. boolean contains = false;
  140.  
  141. for (int i = 0; i < shapes.size(); i++) {
  142. if (shapes.get(i).intersects(e.getX(), e.getY(), 5, 5)) {
  143. contains = true;
  144. pos = i;
  145. return;
  146. }
  147. }
  148. if (!contains) {
  149. if (needClear) {
  150. xPoints.clear();
  151. yPoints.clear();
  152. pointsListX.clear();
  153. pointsListY.clear();
  154. x.clear();
  155. y.clear();
  156. shapes.clear();
  157. needClear = false;
  158. }
  159. x.add(e.getX());
  160. y.add(e.getY());
  161.  
  162. pointsListX.add(e.getX());
  163. pointsListY.add(e.getY());
  164. Rectangle2D.Double rec = new Rectangle2D.Double(e.getX(), e.getY(), 10, 10);
  165. shapes.add(rec);
  166.  
  167. repaint();
  168. }
  169. }
  170.  
  171. @Override
  172. public void mouseReleased(MouseEvent e) {
  173. pos = -1;
  174. }
  175.  
  176. @Override
  177. public void mouseEntered(MouseEvent e) {
  178. setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
  179. }
  180.  
  181. @Override
  182. public void mouseExited(MouseEvent e) {
  183. }
  184.  
  185. @Override
  186. public void mouseDragged(MouseEvent e) {
  187. if (pos == -1) {
  188. return;
  189. }
  190. shapes.get(pos).setFrame(e.getX(), e.getY(), shapes.get(pos).getWidth(), shapes.get(pos).getHeight());
  191. x.set(pos, e.getX());
  192. y.set(pos, e.getY());
  193. try {
  194. xPoints.clear();
  195. yPoints.clear();
  196. bezierFunc(x.size() - 1, x.size());
  197. } catch (ArrayIndexOutOfBoundsException abc) {
  198. }
  199. repaint();
  200. }
  201.  
  202. @Override
  203. public void mouseMoved(MouseEvent e) {
  204. }
  205.  
  206. }
  207.  
  208. public class Zad6 {
  209.  
  210. public static int value;
  211. static JButton jb;
  212. JFrame jf;
  213. static JPanel jp, container, container2;
  214. JFileChooser fc;
  215. BufferedImage bf, bf2;
  216. Image img;
  217.  
  218. public Zad6() {
  219. value = 0;
  220. fc = new JFileChooser();
  221. jf = new JFrame("Bezier");
  222. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  223. jf.setSize(new Dimension(800, 600));
  224. jb = new JButton("Draw!");
  225. jp = new JPanel();
  226. container = new MyPanel();
  227. container.setPreferredSize(new Dimension(500, 500));
  228. container.setBackground(Color.white);
  229. jp.setPreferredSize(new Dimension(800, 600));
  230. jp.setLayout(new FlowLayout());
  231. jf.add(jp);
  232. jp.add(container);
  233. jp.add(jb);
  234. jf.pack();
  235. jf.setVisible(true);
  236. }
  237.  
  238. /**
  239. * @param args the command line arguments
  240. */
  241. public static void main(String[] args) {
  242. new Zad6();
  243. }
  244.  
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement