计算机图形学五角星c语言,计算机图形学五角星的裁剪代码

计算机图形学五角星的裁剪代码

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class ClipLine extends Frame

{

public static void main(String[] args)

{new ClipLine();}

ClipLine()

{

super("Click on two opposite corners of a rectangle");

addWindowListener(new WindowAdapter()

{public void windowClosing(WindowEvent e){System.exit(0);}});

setSize(1000,1000);

add("Center", new CvClipLine());

setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

show();

}

}

class CvClipLine extends Canvas

{

float xmin, xmax, ymin, ymax, rWidth = 20.0F, rHeight = 12.0F, pixelSize;

int maxX, maxY, centerX, centerY, np = 0;

CvClipLine()

{

addMouseListener(new MouseAdapter()

{

public void mousePressed(MouseEvent evt)

{

float x = fx(evt.getX()), y = fy(evt.getY());

if(np == 2) np = 0;

if(np == 0) {xmin = x; ymin = y;}

else

{

xmax = x; ymax = y;

if(xmax < xmin)

{

float t = xmax; xmax = xmin; xmin = t;

}

if(ymax < ymin)

{

float t = ymax; ymax = ymin; ymin = t;

}

}

np++;

repaint();

}

});

}

void initgr()

{

Dimension d = getSize();

maxX = d.width - 1; maxY = d.height - 1;

pixelSize = Math.max(rWidth / maxX, rHeight / maxY);

centerX = maxX / 2; centerY = maxY / 2;

}

int iX(float x){return Math.round(centerX + x / pixelSize);}

int iY(float y){return Math.round(centerY - y / pixelSize);}

float fx(int x){return (x - centerX) * pixelSize;}

float fy(int y){return (centerY - y) * pixelSize;}

void drawLine(Graphics g, float xP, float yP, float xQ, float yQ)

{

g.drawLine(iX(xP), iY(yP), iX(xQ), iY(yQ));

}

int clipCode(float x, float y)

{

return

(x < xmin ? 8 : 0) | (x > xmax ? 4 : 0) | (y < ymin ? 2 : 0) | (y > ymax ? 1 : 0);

}

void clipLine(Graphics g, float xP, float yP, float xQ, float yQ, float xmin, float ymin, float xmax, float ymax)

{

int cP = clipCode(xP, yP), cQ = clipCode(xQ, yQ);

float dx, dy;

while((cP | cQ) != 0)

{

if((cP & cQ) != 0) return;

dx = xQ - xP; dy = yQ - yP;

if(cP != 0)

{

if ((cP & 8) == 8){ yP += (xmin - xP) * dy / dx; xP = xmin;}

else

if ((cP & 4) == 4){ yP += (xmax - xP) * dy / dx; xP = xmax;}

else

if ((cP & 2) == 2){ xP += (ymin - yP) * dx / dy; yP = ymin;}

else

if ((cP & 1) == 1){ xP += (ymax - yP) * dx / dy; yP = ymax;}

cP = clipCode(xP, yP);

}

else

if(cQ != 0)

{

if ((cQ & 8) == 8){ yQ += (xmin - xQ) * dy / dx; xQ = xmin;}

else

if ((cQ & 4) == 4){ yQ += (xmax - xQ) * dy / dx; xQ = xmax;}

else

if ((cQ & 2) == 2){ xQ += (ymin - yQ) * dx / dy; yQ = ymin;}

else

if ((cQ & 1) == 1){ xQ += (ymax - yQ) * dx / dy; yQ = ymax;}

cQ = clipCode(xQ, yQ);

}

}

drawLine(g, xP, yP, xQ, yQ);

}

public void paint(Graphics g)

{

initgr();

if(np == 1)

{

drawLine(g, fx(0), ymin, fx(maxX), ymin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值