[计算机图形学]Python实现梁友栋裁剪算法
梁友栋算法是很简单的一个裁剪算法,但是只适用于裁剪范围是矩形框并且矩形框边界平行于坐标轴的情况。
实验结果:
完整代码:
注意代码没有写到线是平行和垂直的情况,也没有考虑线不经过框的情况,所以输入的时候要注意
##梁友栋
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
import random as rd#梁友栋算法计算出起点组最小组中的最大值,终点组
#求出PL,PR,PB,PT的坐标
def calPoint(p0,p1,LRBT):dx=p1[0]-p0[0]dy=p1[1]-p0[1]
## 按要求写出ri,si rL=-dxrR=dxrB=-dyrT=dysL=p0[0]-LRBT[0]sR=LRBT[1]-p0[0]sB=p0[1]-LRBT[2]sT=LRBT[3]-p0[1]r_list=[rL,rR,rB,rT]s_list=[sL,sR,sB,sT]print("r_list,s_list",r_list,s_list)
## t_list=[]start_group=[]end_group=[]
## 计算ti=ri/sifor i in range(0,4):
## 分配到起点组终点组if(r_list[i]<0):start_group.append(s_list[i]/r_list[i])if(r_list[i]>0):end_group.append(s_list[i]/r_list[i])print("sg,eg",start_group,end_group)return start_group,end_group
def setAxis():lent=range(-15,15,1)plt.xticks(lent)plt.yticks(lent)plt.plot([-18,18],[0,0],'k')plt.plot([0,0],[-18,18],'k')
## plt.grid()
def calLRBT(site,line):d=line/2#返回LRBT的直线坐标LRBT=[site[0]-d,site[0]+d,site[1]-d,site[1]+d]return LRBT
def drawBorder(LRBT):#从左下角开始4个点x1=[LRBT[0],LRBT[2]]x2=[LRBT[1],LRBT[2]]x3=[LRBT[1],LRBT[3]]x4=[LRBT[0],LRBT[3]]print(x1,x2,x3,x4)drawLine(x1,x2,'k')drawLine(x1,x4,'k')drawLine(x3,x4,'k')drawLine(x3,x2,'k')
def drawLine(st,ed,r='b'):plt.plot([st[0],ed[0]],[st[1],ed[1]],r)
if __name__=="__main__":setAxis()##起点 中点st=list(map(int,input("起点:").split()))ed=list(map(int,input("终点:").split()))
## 边界 规定中点为(10,10),方框边长为5border_site=list(map(int,input("方框中心:").split()))border_line=int((input("边长:")))
## st=[1,3]
## ed=[8,8]
## border_site=[4,4]
## border_line=4dpx=ed[0]-st[0]dpy=ed[1]-st[1]drawLine(st,ed)LRBT=calLRBT(border_site,border_line)drawBorder(LRBT)start_group,end_group=calPoint(st,ed,LRBT)start_group.append(0)end_group.append(1)t0=max(start_group)t1=min(end_group)new_p0=[dpx*t0+st[0],dpy*t0+st[1]]new_p1=[dpx*t1+st[0],dpy*t1+st[1]]drawLine(new_p0,new_p1,'y')plt.show()
## print(st,ed,border_site,border_line)
[计算机图形学]Python实现梁友栋裁剪算法相关推荐
- 计算机图形学 裁剪算法源代码,OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果.doc...
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 .<计算 ...
- java实现梁友栋裁剪算法_梁友栋裁剪算法
梁友栋裁剪算法 用任意颜色绘制窗口,并用一种颜色绘制线段,利用P181页所示梁友栋裁剪算法对线段进行裁剪.要求能够演示出裁剪过程,裁剪前的图形要绘出,当按下任意按键,绘制出裁剪结果.请使用TC打开源程 ...
- 《计算机图形学》实验报告 Cohen Sutherland裁剪算法
一.实验目的和要求 熟悉光栅图形学中的相关直线段裁剪算法.理解Cohen-Sutherland裁剪算法. 二.实验内容 实现Cohen-Sutherland编码线段裁剪算法,能看到裁剪前后的屏幕显示效 ...
- 计算机图形学:Cohen-Sutherland直线段剪裁算法及梁友栋-Barsky裁剪算法(算法原理及代码实现)
一.算法实现原理 Cohen-Sutherland直线段剪裁算法: 算法原理: (1)判断线段两端是否都落在窗口内,如果是,则线段完全可见,否则进行下一步 (2)判断线段两端是否都落在窗口外,如果是, ...
- 梁友栋-Barsky裁剪算法原理分析
梁友栋-Barsky算法是一种参数线裁剪算法. 为两个参数方程,为两点的差值,其中的由来是整理参数方程中三角函数的值得出,因为取值需要在裁剪框内,所以u只需要取0~1范围内的就足够. 是结合四条边界线 ...
- 理解梁友栋-Barsky裁剪算法
学习图形学窗口裁剪算法时,很多教材只是对梁友栋-Barsky裁剪算法过程做了简单的介绍,并没有对原理过多的解释.老而学者如秉烛夜行,用了两三天时间终于搞明白算法原理. 消除指定区域内或区域外的图形部分 ...
- 计算机图形学--方法篇(DDA画线算法)
计算机图形学中所有的绘制算法都是用离散的点尽可能的去逼近理想的图形,本篇为大家介绍常见的几种画线算法. 首先啰嗦一下大家都懂得直线方程,假设有直线: x的增量,y的增量有这样的关系: 或 ...
- 计算机图形学常用算法实现9 梁友栋-Barskey裁剪算法
这个算法的效率比前面提到的Cohen-Sutherland要高 思路是把直线表示为参数方程形式, x= x1+udx y = y1+udy 由xmin<x<xmax ymin<y&l ...
- 用python实现liang-Barsky二维裁剪算法
下面是一个使用 Python 实现的示例代码: def liang_barsky(x1, y1, x2, y2, xmin, ymin, xmax, ymax):dx = x2 - x1dy = y2 ...
最新文章
- 科学家利用脑机接口让患者正常发声
- Sqlserver 优化的方法
- ado filter 多条记录_江苏气动断料锯商家,多条锯_邢台富宇来机械厂
- GirlView的分页
- 带有AWS Lambda和Java的无服务器FaaS
- 用VC写Assembly代码(4)
- 中级前端开发推荐书籍
- matlab通用程序,三次样条差值-matlab通用程序
- 生成式模型(generative) vs 判别式模型(discriminative)
- C# 根据空格数截取
- 2018 CSS 大会多图见闻录
- 星光嵌入式WM8978音频模块发布
- 软件测试薪资高不高?软件测试工资水平调研公布
- 【数据压缩】使用Audacity软件分析浊音、清音爆破音的时域及频域特性。
- console,控制台也能玩出花样(console操作大全)
- “大学生就业难”与IT外包服务带给我的启发
- window expects a time attribute for grouping in a stream environment.
- 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
- 社会主义市场经济的运作机制
- OCR文本识别系统项目文档——欢迎探讨交流