Example #1
0
inline static bool getClipPoint(int &cx1, int &cy1, int x1, int y1, int x2, int y2)
{
  bool s1 = trfPointOnScr(x1, y1);
  bool s2 = trfPointOnScr(x2, y2);

  if (s1 && s2) return false;

  if (!s1 && s2)
  {
    qSwap(x1, x2);
    qSwap(y1, y2);
  }

  double cpx1;
  double cpx2;
  double cpy1;
  double cpy2;

  int w, h;
  trfGetScreenSize(w, h);

  if (liangBarsky(0, w, 0, h, x1, y1, x2, y2, cpx1, cpy1, cpx2, cpy2))
  {
    cx1 = cpx2;
    cy1 = cpy2;
    return true;
  }

  return false;
}
int main()
{
    int gdriver = DETECT, gmode;
    initgraph(&gdriver, &gmode, "");
    setbkcolor(WHITE);
    cleardevice();
    drawAxis(BLACK);
    int x1,y1,x2,y2;
    printf("Enter line coordinates\n");
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    Line l = Line{Point{x1,y1}, Point{x2,y2}};
    l.plotLineDDA(RED);

    Rect r;
    printf("Enter rectangle\n");
    scanf("%lf%lf%lf%lf",&r.min.x, &r.min.y, &r.max.x, &r.max.y);
    r.plotRect(GREEN);
    liangBarsky(&r, &l, YELLOW); //-> mid pt not working here
    getch();
    closegraph();
    return 0;
}