图形学源码分享:多边形裁剪技巧解析

版权申诉
0 下载量 107 浏览量 更新于2024-11-11 收藏 41KB RAR 举报
在计算机图形学中,多边形裁剪是一个核心概念,涉及到将一个图形从屏幕或图像的特定区域中剔除掉一部分的过程。裁剪操作通常发生在图形渲染的光栅化阶段,确保只绘制视野范围内的图形部分。这一过程不仅提高了渲染效率,也是为了提高最终图像的质量,因为它可以避免不必要的计算和渲染。 多边形裁剪技术应用广泛,不仅限于2D图形处理,在3D图形渲染、游戏开发、CAD软件等领域也有重要的作用。例如,在游戏场景中,裁剪技术可以确保玩家只能看到视野内的部分,而不必浪费资源渲染视野外的内容。在3D建模软件中,多边形裁剪可以帮助用户更加精确地选择和编辑模型的特定部分。 裁剪算法的效率和准确性直接影响到图形处理的性能和质量。常见的多边形裁剪算法包括Cohen-Sutherland算法、Liang-Barsky算法、Sutherland-Hodgman算法等。这些算法各有优势和特点,可以根据具体应用场景选择使用。 Cohen-Sutherland算法是一种基于区域编码的裁剪算法,它通过给屏幕区域编码来快速判断哪些部分应该被裁剪掉。算法通过预设的规则来判断图形的各个顶点是在裁剪窗口的内部还是外部,从而确定裁剪线段的位置。 Liang-Barsky算法则是利用参数化线段表示和边界检查来完成裁剪的。算法通过确定线段参数化的最小和最大值来找出与裁剪窗口的交点,并据此进行裁剪。 Sutherland-Hodgman算法是一种适用于任意多边形的裁剪算法,它的优势在于能够处理复杂的多边形相互裁剪的情况。算法通过将裁剪窗口视为一个不断移动的边界,逐步将多边形的每一条边与边界进行比较和裁剪,从而得到最终裁剪后的多边形。 在实际应用中,开发者通常会根据具体需求选择合适的裁剪算法,或者对现有算法进行优化以提高性能。例如,在硬件加速渲染中,可能会采用更适合GPU并行计算的裁剪算法。 本次课程设计中提供的源代码 "bd.rar_多边形裁剪" 是为了帮助学生理解和实现多边形裁剪算法。压缩文件 "bd.rar" 可能包含了以下几个重要组成部分: 1. 裁剪算法的实现代码:这些代码可能包括Cohen-Sutherland、Liang-Barsky或Sutherland-Hodgman等算法的实现,也可能包含了对这些算法的调优和改进。 2. 测试用例:为了验证算法的正确性,源代码中可能包含一系列的测试用例,这些用例可以是各种形状和大小的多边形,以及不同形状和大小的裁剪窗口。 3. 文档说明:通常源代码会伴随着详细的文档说明,用于解释算法的工作原理、如何使用代码进行裁剪,以及如何运行测试用例等。 4. 开发环境配置说明:为了让其他开发者能够方便地使用和理解代码,文档中还可能包含了如何配置开发环境、安装必要的库和工具等信息。 通过学习和实践这些代码,学生能够更好地掌握多边形裁剪的概念和应用,为未来的图形学相关工作打下坚实的基础。

优化sql:SELECT we.organization_id ,we.wip_entity_id ,case when wl.line_id is null then we.wip_entity_name else '' end wip_entity_name ,we.primary_item_id ,mtt.transaction_type_name ,mmt.transaction_date ,bd.department_code ,mmt.inventory_item_id ,mmt.subinventory_code ,mta.reference_account ,br.resource_code ,lu2.meaning as line_type_name ,mta.base_transaction_value ,mta.cost_element_id ,flv.meaning as cost_element ,wdj.class_code job_type_code ,ml.meaning job_type_name FROM (select * from gerp.mtl_material_transactions where substr(transaction_date,1,7) >= '2023-06' and transaction_source_type_id = 5) mmt inner join gerp.wip_entities we on mmt.organization_id = we.organization_id inner join gerp.mtl_transaction_accounts mta on mta.transaction_source_id = we.wip_entity_id and mta.transaction_id = mmt.transaction_id and mta.transaction_source_type_id = 5 inner join gerp.mtl_transaction_types mtt on mtt.transaction_type_id = mmt.transaction_type_id inner join mfg_lookups lu2 on lu2.lookup_code = mta.accounting_line_type and lu2.lookup_type = 'CST_ACCOUNTING_LINE_TYPE' inner join gerp.mtl_system_items_b msi on msi.inventory_item_id = mmt.inventory_item_id and msi.organization_id = mta.organization_id left join gerp.bom_departments bd on bd.department_id = mmt.department_id left join gerp.bom_resources br on br.resource_id = mta.resource_id left join gerp.wip_lines wl on wl.line_id = mmt.repetitive_line_id left join gerp.wip_discrete_jobs wdj on wdj.wip_entity_id = mta.transaction_source_id left join gerp.fnd_lookup_values_vl flv on cast(mta.cost_element_id as string) = flv.lookup_code and flv.lookup_type = 'CST_COST_CODE_TYPE' left join mfg_lookups ml on ml.lookup_code = wdj.job_type and ml.lookup_type = 'WIP_DISCRETE_JOB' 。其中mmt,we,mta,msi,wdj数据量很大

247 浏览量

以hive的角度检查语法: with cur_dim_comb as (SELECT DISTINCT t.dim_comb ,t.var_sub_class ,t.acc_value FROM gerp.cux_cst_data_alloc_his t WHERE t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id )) select tp.bd_code --事业部编码 ,tp.bd_name --事业部名称 ,hp.ou_code --OU名称 ,hp.ou_name --OU编码 ,op.main_class_desc --差异大类 ,op.acc_value --科目代码 ,op.acc_desc --科目名称 ,op.dim_comb --区分维度 ,op.begin_amount --期初余额 ,op.accrual_amount --本期发生 ,op.balance_diff_alloc_amount --期末差异结存 ,op.var_sub_class ,op.main_class_value ,op.org_id ,op.period_name ,op.job_ver_id from (select up.* ,q1.* from (SELECT DISTINCT maincl.* ,t.* FROM t inner join (SELECT fv.flex_value ,fv.description FROM fv inner join fs on fv.flex_value_set_id = fs.flex_value_set_id AND fs.flex_value_set_name = 'CUX_CST_VARIANCE_TYPE' AND fv.enabled_flag = 'Y' AND fv.hierarchy_level = '2' AND fv.flex_value LIKE '10%' ) maincl on t.var_main_class = maincl.flex_value inner join cur_dim_comb on cur_dim_comb.var_sub_class = t.var_sub_class and cur_dim_comb.acc_value = t.acc_value WHERE 1 = 1 AND t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id) ORDER BY maincl.description ,t.acc_value ,cur_dim_comb.dim_comb ) up inner join (SELECT t1.* ,SUM(t1.begin_amount) begin_amount ,SUM(t1.accrual_amount) accrual_amount ,SUM(t1.balance_diff_alloc_amount) balance_diff_alloc_amount FROM gerp.cux_cst_data_alloc_his t1 LEFT JOIN gerp.cux_cst_data_alloc_his t ON t1.top_var_type = '10' AND t1.var_sub_class = t.var_sub_class --p_var_sub_class AND t1.org_id = t.org_id --p_org_id AND t1.period_name = t.period_name --p_period_name AND t1.job_ver_id = t.job_ver_id --p_job_ver_id AND t1.acc_value = t.acc_value --p_acc_value WHERE t1.dim_comb in (select distinct dim_comb from cur_dim_comb) group by t1.org_id,t1.period_name,t1.job_ver_id,t1.var_sub_class,t1.acc_value ) q1 on q1.org_id = up.org_id --p_org_id AND q1.period_name = up.period_name --p_period_name AND q1.job_ver_id = up.job_ver_id --p_job_ver_id AND q1.var_sub_class = up.var_sub_class --p_var_sub_class AND q1.acc_value = up.acc_value --p_acc_value ) op

220 浏览量

``` -- 不包含进度节点的表(维度分布表) -- 筛选条件 国家、车型、产品线、项目名称、项目编码 SELECT P1.code project_code, P1.name project_name, P1.plan_starttime , P1.plan_endtime , P1.real_starttime , P1.real_endtime , P2.name country, P3.name project_state, P4.name product_line, P5.name project_type, CASE WHEN P3.name = '已完成' AND P1.real_endtime > P1.plan_endtime THEN '延期完成' WHEN P3.name = '已完成' AND P1.real_endtime <= P1.plan_endtime THEN '正常完成' WHEN P3.name = '已终止' THEN '已终止' WHEN P3.name = '已暂停' THEN '已暂停' WHEN P3.name = '执行中' AND CURRENT_TIMESTAMP() > P1.plan_endtime THEN '执行中延期' WHEN P3.name = '执行中' AND CURRENT_TIMESTAMP() <= P1.plan_endtime THEN '正常' WHEN P3.name = '编制中' THEN NULL ELSE NULL END status_light FROM view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_17010_hw_dev15oc_1054010535 P1 LEFT JOIN (SELECT id, name FROM view.view.ic_dev15oc_mart.view_ods_plm_bd_cust_doc_17010_dev15oc_1054010535 WHERE name IN ('泰国', '巴西', '匈牙利', '印尼', '土耳其', '乌兹')) P2 ON P1.areafdkj = P2.id LEFT JOIN view.ic_dev15oc_mart.view_ods_plm_imp_base_lc_st_17010_dev15oc_1054010535 P3 ON P1.lifecycle_attrpool_id = P3.id LEFT JOIN (SELECT id, name FROM view.ic_dev15oc_mart.view_ods_plm_org_admin_17010_dev15oc_1054480402 WHERE parentid = '1618991418594820098') P4 ON P1.ownedorg = P4.id LEFT JOIN view.ic_dev15oc_mart.view_ods_plm_imp_plm_pm_prj_cgr_17010_dev15oc_1054010535 P5 ON P1.classify_id = P5.id WHERE P1.real_endtime IS NOT NULL; /* SELECT * FROM view.ic_dev15oc_mart.view_ods_plm_imp_plm_pm_task_type_17010_dev15oc_1054010535 P7 SELECT * FROM view.ic_dev15oc_mart.view_ods_plm_imp_plm_pm_role_17010_dev15oc_1054010535 P8 SELECT * FROM view.ic_dev15oc_mart.view_ods_plm_bd_staff_17010_dev15oc_1054480385 P9 SELECT * FROM view.ic_dev15oc_mart.view_ods_plm_imp_plm_pm_prj_t_dt_17010_dev15oc_1054010535 P10 */```请在这段spark sql后面新增一列系统修改时间

2025-03-21 上传
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部