[计算机图形学]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 ...
最新文章
- 洞察|一图看懂AI新基建如何落地
- Android 移植到 C#
- python装饰器作用-Python装饰器用法实例总结
- android n-ify miui,MIUI7.5版刷机包
- 必须掌握的Python技巧(一)
- top、kill实现进程结束
- 一次慢查询暴露的隐蔽的问题
- 集成电路总设计(Ⅴ)
- C# Winform SplitContainer组件创建侧边菜单
- 数学作图 网站 测试网站
- matlab中dfft,语音识别的matlab程序
- Rme Babyface Pro FS娃娃脸声卡安装调试教程
- fiash星空动画制作_Flash8简单制作酷炫的星空飞越动画特效
- 皇后游戏c语言,C语言中关于4皇后或8皇后问题!
- 【靶场补充】项目十二补充(shellshock原理)
- Python多态与鸭子类型
- 2019年繁星屠龙1-8窍门_狂打一星,新版《倚天屠龙记》就那么烂?
- 欧几里得 推 扩展欧几里得
- python处理\u200b
- Designing Data-Intensive Applications(设计数据密集应用)- O'Reilly 2017 读书笔记