Внешнее отсечении формы окном

180
11 декабря 2017, 15:09

Добрый день! Не могу решить данную задачу, буду очень признателен. Необходимо выполнить внешнее отсечение пятиугольника окном на основе алгоритма Сазерленда-Коуэна. Что я только не пробовал, у меня не выходит. Пробовал, как на с++, но нет понятия, как это сделать.

import javafx.scene.canvas.Canvas;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
public class RT{
int x1,x2,x3;
double xa;
double ya;
double xb;
double yb;
private int n = 5;
private int m = 6;
   public void point(double x, double y) {};
private double[] EndXmas = {225, 275, 300, 250, 200, 225};
private double[] EndYmas = {300, 300, 250, 200, 250, 300};
private Rectangle r1 = new Rectangle(200, 260, 250, 290);
private Rectangle r2 = new Rectangle(260, 210, 290, 290);
private Rectangle r3 = new Rectangle(200, 210, 250, 240);
Line [] lines = new Line[];
             for (int i=0, j=1; i<n; i++,j++){
    Canvas.MoveTo(EndXmas[i],EndYmas[i]);
    Line(EndXmas[j],EndYmas[j]);
}

    for (int i=0, j=1; i<n; i++,j++){
    point a[]={EndXmas[i],EndYmas[i]};
    point b[]={EndXmas[j],EndYmas[j]};
    x1 = cohen_sutherland (r1, a, b);
    x2 = cohen_sutherland (r2, a, b);
    x3 = cohen_sutherland (r3, a, b);
    if ((x1==0)||(x2==0)||(x3==0)){
    xa = a->x;
    ya = a->y;
    xb = b->x;
    yb = b->y;
    }

    Canvas.MoveTo(xa,ya);
    Canvas.lines(xb,yb);
    }

 int LEFT=1;
        int RIGHT=2;
       int  BOT=4;
       int  TOP= 8;
        int vcode(r, p){
            ((((p)->x < (r)->x_min) ? LEFT : 0)+ (((p)->x > (r)->x_max) ? 
    RIGHT : 0)+(((p)->y < (r)->y_min) ? BOT : 0)+(((p)->y > (r)->y_max) ? TOP : 0));
        }

  int cohen_sutherland (int r, int a, int b) {
    int code_a, code_b, code;
    int c;
    code_a = vcode(r, a);
    code_b = vcode(r, b);
    while (code_a | code_b) {
        if (code_a & code_b) return -1;
        if (code_a) {
            code = code_a;
            c = a;
        } else {
            code = code_b;
            c = b;
        }
        if (code & LEFT) {
            c -> y += (a -> y - b -> y) * (r -> x_min - c -> x) / (a -> x - b -> x);
            c -> x = r -> x_min;
        } else if (code & RIGHT) {
            c -> y += (a -> y - b -> y) * (r -> x_max - c -> x) / (a -> x - b -> x);
            c -> x = r -> x_max;
        } else if (code & BOT) {
            c -> x += (a -> x - b -> x) * (r -> y_min - c -> y) / (a -> y - b -> y);
            c -> y = r -> y_min;
        } else if (code & TOP) {
            c -> x += (a -> x - b -> x) * (r -> y_max - c -> y) / (a -> y - b -> y);
            c -> y = r -> y_max;
        }
        if (code == code_a) {
            a = c;
            code_a = vcode(r, a);
        } else {
            b = c;
            code_b = vcode(r, b);
        }
    }
    return 0;
}}

Буду признателен любой помощи

READ ALSO
Fragment не обновляется

Fragment не обновляется

У меня 2 Activity на одном RecyclerView, на другом FragmentВ Activity в котором RecyclerView все хорошо работает, он заполняется

186
jQuery.Deferred exception: Illegal invocation TypeError: Illegal invocation

jQuery.Deferred exception: Illegal invocation TypeError: Illegal invocation

Пытаюсь вставить значение из inputКогда прописываю строкой - все работает, когда тяну из переменной - jQuery

325
Jquery.Ajax Отправка формы

Jquery.Ajax Отправка формы

Добрый деньПодскажите пожалуйста как при успешной проверке формы (data

231
Не срабатывает jQuery при проверке

Не срабатывает jQuery при проверке

Не срабатывает jQuery , проверяю запросом в body

276