Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package cz.uhk.vanclma2.tvary;
- import java.awt.Color;
- import java.awt.Point;
- import cz.uhk.vanclma2.gui.DrawImage;
- /**
- *
- * @author Martin Vancl
- *
- */
- public class UseckaTrivial implements TvaryIface {
- private int x1;
- private int y1;
- private int x2;
- private int y2;
- private Color barva;
- /**
- * Nakresli usecku trivialnim algoritmem. Trida UseckaTrivial obsahuje metody pro ScanLine
- * vyplnovaci algoritmus - je nutne ji pouzit pro ScanLine.
- * @param start
- * Pocatecni bod usecky
- * @param cil
- * Koncovy bod usecky
- * @param barva
- * Barva usecky
- */
- public UseckaTrivial(Point start, Point cil, Color barva) {
- this.x1 = start.x;
- this.y1 = start.y;
- this.x2 = cil.x;
- this.y2 = cil.y;
- this.barva = barva;
- }
- // pro scan line ###########################################
- public UseckaTrivial(UseckaTrivial usecka) {
- this.x1 = usecka.x1;
- this.x2 = usecka.x2;
- this.y1 = usecka.y1;
- this.y2 = usecka.y2;
- }
- /**
- * Otoci smer usecky
- */
- public void prohodKoncoveBody() {
- if (y2 < y1) {
- int p;
- p = x1;
- x1 = x2;
- x2 = p;
- p = y1;
- y1 = y2;
- y2 = p;
- }
- }
- /**
- * Najde prusecik 2 usecek
- */
- public int zjistiPrusecik(int y) {
- float dy = y1 - y2;
- float dx = x1 - x2;
- float k = dx / dy;
- float q = k * (y - y1) + x1;
- return (int) q;
- }
- /**
- * U vodorovnych usecek se nepocitaji pruseciky
- * @return true/false podle toho, jestli je vodorovna
- */
- public boolean jeVodorovna() {
- return (y2 == y1);
- }
- public boolean jePrusecik(int y) {
- return ((y1 < y) && (y <= y2));
- }
- public int getX1() {
- return x1;
- }
- public int getY1() {
- return y1;
- }
- public int getX2() {
- return x2;
- }
- public int getY2() {
- return y2;
- }
- // pro scan line ###########################################
- public void kresli() {
- // http://cs.wikipedia.org/wiki/P%C5%99%C3%ADmka#Sm.C4.9Brnicov.C3.A1_rovnice_p.C5.99.C3.ADmky
- if (Math.abs(x2 - x1) > Math.abs(y2 - y1)) { // k<1 - funkce klesajici
- if (x1 > x2) { // vymena koncovych bodu
- int pomocna1;
- pomocna1 = x2;
- x2 = x1;
- x1 = pomocna1;
- int pomocna2;
- pomocna2 = y2;
- y2 = y1;
- y1 = pomocna2;
- }
- float k = (float)(y1 - y2) / (x1 - x2); // k = smernice primky, vyjadruje sklon
- float q = y2 - k * x2; // posunuti na ose y
- for (int x = x1; x <= x2; x++) {
- int y = (int)(k * x + q);
- DrawImage.kresliPixel(x, y, barva);
- }
- } else { // k>0 - funkce rostouci
- if (y1 > y2) { // vymena koncovych bodu
- int pomocna1;
- pomocna1 = x2;
- x2 = x1;
- x1 = pomocna1;
- int pomocna2;
- pomocna2 = y2;
- y2 = y1;
- y1 = pomocna2;
- }
- float k = (float)(x1 - x2) / (y1 - y2);
- float q = x2 - k * y2;
- for (int y = y1; y <= y2; y++) {
- int x = (int)(k * y + q);
- DrawImage.kresliPixel(x, y, barva);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment