直线裁剪C语言代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:直线段的裁剪
一、实验目的
熟练掌握二维图形中直线段的裁剪算法
能用一种算法对已知直线段进行裁剪
二、实验器材
计算机
三、实验内容
采用Sutherland_hodgeman算法对给定的直线段进行裁剪
四、实验步骤
1、了解算法思想
裁剪区每条边界将平面分为两个部分:可见区与不可见区。分别采用裁剪区域左、上、右、下边界对直线段进行裁剪,根据直线段两个端点与边界的位置关系可分四种:
①线段起点和终点都在不可见区,此时为线段的显然不可见,退出程序
②线段起点在不可见区域、终点在可见区,此时保留交点和终端点
③线段起点在可见区域、终点在不可见区,此时可互换起点与终点,之后与2的情况一样
④线段起点在和终点都在可见区,此时保留起点和终端点
2、在C#环境下实现算法
程序中包括:①给定裁剪区域边界范围
②给定一直线段的两个端点坐标
③采用裁剪区域边界逐边对线段进行裁剪
④输出线段裁剪结果
五、要求
1、上机报告
2、程序存盘上交
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication31
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
int xl,xr,yb,yt,x1,x2,y1,y2,x,y;
xl = 2500;
xr = 5500;
yb = 2500;
yt = 6500;
Bitmap bmp;
Graphics graphics = this.CreateGraphics();
bmp = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height);
Graphics g = this.CreateGraphics();
Pen p1 = new Pen(Color.Red);
g.DrawLine(p1, 2500, 2500, 2500, 6500);
g.DrawLine(p1, 2500, 6500, 5500, 6500);
g.DrawLine(p1, 5500, 6500, 5500, 2500);
g.DrawLine(p1, 5500, 2500, 2500, 2500);
x1 = int.Parse (textBox1.Text );
y1 = int.Parse(textBox2.Text );
x2 = int.Parse(textBox3.Text );
y2 = int.Parse(textBox4.Text );
if (x1 < xl && x2 < xl)
{
}
else
{
if (x1 < xl && x2 >= xl)
{
y1 = (int)(y1 + (xl - y1) * ((y2 - y1) / (x2 - x1))); x1 = xl;
}
else
{
if (x1 >= xl && x2 < xl)
{
x = x1;
y = y1;
y1 = y1 + (y2 - y1) * (xl - y1) / (y2 - y1);
x1 = xl;
x2 = x;
y2 = y;
}
}
}
if (y1 > yt && y2 > yt)
{
}
else
{
if (y1 > yt && y2 <= yt)
{
y1 = x1 + (y2 - y1) * (yt - y1) / (y2 - y1);
y1 = yt;
}
else
{
if (y1 <= yt && y2 > yt)
{
x = x1;
y = y1;
x1 = (int)(x1 + (x2 - x1) * (yt - y1) / (y2 - y1)); y1 = yt;
x2 = x;
y2 = y;
}
}
}
if (x1 > xr && x2 > xr)
{
}
else
{
if (x1 > xr && x2 <= xr)
{
y1 = (int)(y1 + (y2 - y1) * (xr - x1) / (x2 - x1));
x1 = xr;
}
else
{
if (x1 <= xr && x2 > xr)
{
x = x1;
y = y1;
y1 = (int)(y1 + (y2 - y1) * (xr - x1) / (x2 - x1)); x1 = xr;
x2 = x;
y2 = y;
}
}
}
if (y1 < yb && y2 < yb)
{
}
else
{
if (y1 < yb && y2 >= yb)
{
x1 = x1 + (x2 - x1) * (yb - y1) / (y2 - y1);
y1 = yb;
}
else
{
if (y1 >= yb && y2 < yb)
{
x = x1;
y = y1;
x1 = (int)(x1 + (x2 - x1) * (yb - y1) / (y2 - Y1)); y1 = yb;
x2 = x;
y2 = y;
}