实验三:直线段的裁剪
一、实验目的
熟练掌握二维图形中直线段的裁剪算法
能用一种算法对已知直线段进行裁剪
二、实验器材
计算机
三、实验内容
采用Sutherland_hodgeman算法对给定的直线段进行裁剪
四、实验步骤
1、了解算法思想
裁剪区每条边界将平面分为两个部分:可见区与不可见区。分别采用裁剪区域左、上、右、下边界对直线段进行裁剪,根据直线段两个端点与边界的位置关系可分四种:
①线段起点和终点都在不可见区,此时为线段的显然不可见,退出程序
②线段起点在不可见区域、终点在可见区,此时保留交点和终端点
③线段起点在可见区域、终点在不可见区,此时可互换起点与终点,之后与2的情况一样
④线段起点在和终点都在可见区,此时保留起点和终端点
2、在C#环境下实现算法
程序中包括:①给定裁剪区域边界范围
②给定一直线段的两个端点坐标
③采用裁剪区域边界逐边对线段进行裁剪
④输出线段裁剪结果
五、要求
1、上机报告
2、程序存盘上交
using System;
using System.Collections.Generic;
using https://www.doczj.com/doc/d415877501.html,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;
}
}
}
g.DrawLine(p1,x1, y1, x2, y2); }
}
}
1.要求在屏幕上输出下一行信息。 This is a c program. 程序: #include
#include
#include
#include
创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 1.要求在屏幕上输出下一行信息。 This is a c program. 程序: #include
sum=a+b; printf(“sum is %d\n”,sum); return 0; } 3.求两个整数之间的较大者。 程序: #include
} 4.有人用温度计测量出华氏发表示的温度(如69°F),今要 求把她转换成以摄氏法表示的温度(如20℃)。 公式:c=5(f-32)/9. 其中f代表华氏温度,c代表摄氏温度。 程序: #include
c语言基本代码 Prepared on 22 November 2020
'\0':是字符串的结束标志 ‘‘:空格 auto:声明自动变量一般不使用 double:声明双精度变量或函数(和%lf连用), m=(double)(v-l)/l*100+; 这个式子加个double是将后面式子中非double类型强制转换类型为double float:声明浮点型变量或函数(和%f连用),单精度 int:声明整型变量或函数(与%d连用) struct:声明结构体变量或函数 long:声明长整型变量或函数 switch:用于开关语句 enum:声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) extern:声明变量是在其他文件正声明(也可以看做是引用变量) return:子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const:声明只读变量 short:声明短整型变量或函数 unsigned:声明无符号类型变量或函数 signed:生命有符号类型变量或函数 void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度,,是整型表达式用法sizeof(类型说明符,数组名或表达式);sizeof()是获取类型占用的字节数,是整形的 volatile:说明变量在程序执行中可被隐含地改变 static:声明静态变量 char:声明字符型变量或函数 strcmp:strcmp(s1,s2)比较字符串大小两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止大于返回1小于返回-1等于返回0 循环: for:一种循环语句(可意会不可言传)for(表达式1;表达式2;表达式3)while:循环语句的循环条件 do:循环语句的循环体 break:跳出当前循环 continue:结束当前循环,开始下一轮循环 判断: d=a>30b:c:相当于if暨当a>30是d=b否则d=c;
由键盘任意输入1个4位数整数,分别输出其中的个位、十位、百位、千位。 /* expe 3-10 */ #include
/**返回的long型的最大值是startLongValue+count-1(产生一个随机数) * param needCount * param count * param startLongValue * return */ public static List
1.编写一个C程序,输入a、b、c三个数,输出其中最大者。 #include "stdio.h" void main() { int paixu(int a,int b,int c); int a1,a2,a3,m; scanf("%d %d %d",&a1,&a2,&a3); m=paixu(a1,a2,a3); printf("%d",m); } int paixu(int a,int b,int c) { int max(int x,int y); int m; m=max(a,b); m=max(m,c); } int max(int x,int y) { if(x>y) return x; else return y; } 依次将10个数输入,要求将其中最大的数打印出来。 #include "stdio.h" void main() { int a[10],i,m; for(i=0;i<10;i++) scanf("%d",&a[i]); m=a[0]; for(i=1;i<10;i++) if(a[i]>m){m=a[i];} printf("最大数是:"); printf("%d\n",m); } 有3个数a、b、c,要求按从大到小的顺序把它们打印出来。 #include "stdio.h" void main() { int a[3]; int m,i,j; for(i=0;i<3;i++) scanf("%d",&a[i]); for(i=1;i<3;i++) for(j=0;ja[j]) {m=a[j];a[j]=a[i];a[i]=m;} printf("按由大到小排列:"); for(i=0;i<3;i++) printf("%d ",a[i]); } 求1+2+3+ (100) #include "stdio.h" void main() { int i,sum=0; for(i=1;i<=100;i++) { sum=sum+i; } printf("1+2+3+……+100=%d\n" ,sum); } 判断一个数n能否同时被3和5除。 #include "stdio.h" void main() { int a,b; printf("请输入一个整数\n"); scanf("%d",&a); if(a%3==0 && a%5==0) printf("能同时被3和5整除\n"); else printf("不能同时被3和5整除\n"); } 将100~200之间的素数打印出来。
C语言程序设计 <一> 1、程序运行从main()函数开始,也从main()函数结束。 2、函数是C程序的基本单位,由函数头和函数体组成。 3、C语言源程序是由函数组成,它们的数目可以有多个。 4、在C语言源程序中,是必须有一个函数名为main的函数。main()后的小括号()没有任何内容,它不可以省略。 5、C程序中的语句用分号结束,在一个程序行上可以有多个语句,一个C 语句能写在多个程序行上。 6、函数体是由一对大括号围起来语句序列组成。小括号是函数的标志。 二、C语言的组成元素 1、命令、函数和变量等是组成程序的基本对象,每一个程序对象都需要一个名字来标识,程序对象的名称就是标识符。 2、在C语言中,标识符分为用户标识符和系统标识符。 3、用户标识符是指在程序中由程序员为变量、函数、数组等程序对象自行命名的标识符。 4、系统标识符是指C语言编译系统内部预定义的用于表示命令数据内型的标识符,又称保留字符。 5、基本字符集 英文字母:a~z和A~Z。 阿拉伯数字:0~9。其他字符:()、[]、+、-、*、/、%、<、>、<=、>=、==、!=、!、&&、‖、++、--、+=、-=、*=、/=、%=。它们是由1~2个字符组成。用作C语言的运算符;还包括:空格、换行符,回车符,单双引号,大括号,逗号,分号,反斜线,它们在程序中起到分隔和定界作用。 6、标识符:是用于标识命令;变量、函数,数组,数据类型等程序对象名称的字符序列。 7、组成标识符的合法字符有:字母,数字,下划线,三种,数字不能作首字符。 三、执行C语言程序 1、单击“开始”——“程序”——“附件”——“命令提示符”。 2、按功能键<10>激活菜单,执行“File”——“NEW”(ALT+回车)全屏。 3、
初学C语言常用简单程序代码素数的筛选 #include
main() { int x,s,t,d; scanf("%d",&x); s=x%60; t=(x/60)%60; d=(x/60)/60; printf("%d时%d分%d秒",d,t,s); } 三个数的交换 #include
C语言程序设计(医院信息管理系统)附源代码
————————————————————————————————作者:————————————————————————————————日期:
专业设计报告 课程名称: C 语言程序设计课题名称:医院信息管理系统 专业班别:12本计算机科学与技术二班 姓名: 学号: 指导教师: 设计日期:2012-5-25
教师评语: 等级 优良中及格差项目 专业设计目的 设计基本要求 算法分析 源程序代码 源程序代码测试 设计总结 成绩评定: 指导教师签名: 日期:2012 年月日
课程设计题目医院信息管理程序 作者姓名: 同组成员: 摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示 1.专业设计目的 1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历 2、掌握对二进制文件的创建、增添等基本操作。 3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式 2.设计基本要求( 1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。 2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息 3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。 4、要求用四个源文件main.c、link.c、find.c、save_load.c 5、系统完成后应实现类似下面所示界面
以下代码亲自运行成功,可黏贴到vc中运行gets和puts函数 #include"stdio.h" void main() { char str[20]; gets(str);//输入字符串 puts(str);//输出字符串 } 整型、字符、字符串、一维数组的初始化、输入和输出 #include"stdio.h" #include"string.h" void main() { int i = 2; printf("%d\n请输入一个int型",i); int ii; scanf("%d",&ii); printf("%d\n",ii); //字符类型 char c = 'x'; printf("%c\n请输入一个char型",c); char cc; scanf("%c",&cc); //cc = getchar(); printf("%c\n",cc); //putchar(cc); //字符串型 char str[] = "xuxunxun"; printf("%s\n请输入一个字符串类型",str); char strr[100];//必须指定大小 //scanf("%s",strr);//字符数组名就代表了地址 gets(strr);//字符串输入函数 //printf("%s\n",strr); puts(strr); //一维数组 int a[5] = {1,2,3,4,5}; for(int j = 0;j < 5;j ++)
printf("%d\n",a[j]); int b[3]; printf("请输入三个数字\n"); for(int k = 0;k < 3;k ++) { scanf("%d",&b[k]); } printf("输入三个数字是:\n"); for(k = 0;k < 3;k ++) printf("%d\n",b[k]); } //结构体 struct student { char name[9]; int score[3];//存放3门课成绩 }; student stu[2];//定义两个学生的数组 for(int i = 0;i < 2;i ++) { printf("请输入第%d个学生的信息:\n",i + 1); printf("姓名:"); scanf("%s",&stu[i].name); for(int j = 0;j < 3;j ++) { printf("成绩%d:",j + 1); scanf("%d",&stu[i].score[j]); } } 字符串输出
经典C语言源代码 1、(1)某年某月某日是星期几 #include
case 2:printf("Tuesday\n"); break; case 3:printf("Wednesday\n"); break; case 4:printf("Thursday\n"); break; case 5:printf("Friday\n"); break; case 6:printf("Saturday\n"); break; case 0:printf("Sunday\n"); break; } } return 0; } 1、(2)某年某月某日是第几天(一维数组) #include "stdio.h" void main() { int i, flag, year, month, day, dayth; int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; printf("请输入年/月/日:\n"); scanf_s("%d/%d/%d", &year, &month, &day); dayth = day; flag = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); if (flag) month_day[2] = 29;
C语言程序5-3 #include
5-6: #include
1》分解质因数的程序: #include 2》看你的星座的程序: #include 常用的C语言编程实例-实训01 1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?代码: #include "stdio.h" #include "conio.h" main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } getch(); } 2.输入某年某月某日,判断这一天是这一年的第几天? 代码: #include "stdio.h" #include "conio.h" main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month) /*先计算某月以前月份的总天数*/ { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("data error");break; } 经典C语言程序50例(1-50) 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; 1.有三个整数a,b,c ,由键盘输入,输出其中最大的数。 #include scanf("%d",&x); if(x<1) y=x; else if(x<10&&x>=1) y=2*x-11; else y=3*x-11; printf("%d\n",y); } 4.给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。90分以上为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’ #include C语言程序源代码 C语言程序源代码 #include <C语言编程项目源代码
经典C语言程序50例(1-50)
c语言源程序段
C语言程序源代码
C程序代码大全