Java实现的Boid算法图形学演示项目

版权申诉
0 下载量 18 浏览量 更新于2024-11-12 收藏 38KB ZIP 举报
资源摘要信息: "BoidDemo-java.zip_boid" Boid算法是一种模拟群体行为的计算机模型,主要用于生成鸟群、鱼群等群体的运动效果,由Craig Reynolds于1986年提出。该算法通过定义简单的行为规则,使个体在遵循这些规则的情况下,能自然地模拟出群体的复杂运动。Boid算法已经成为计算机图形学中一个非常经典的案例,常用于学习和教学中,帮助开发者理解群体行为的模拟和计算机图形的渲染过程。 在给出的文件资源中,我们看到一个以"BoidDemo-java.zip_boid"为标题的压缩包。该压缩包包含了一系列文件,这表明它可能是一个使用Java语言实现的Boid算法演示项目。具体文件说明如下: 1. boid_demo.html:这个文件很可能是演示程序的入口,它可能是使用HTML编写的,用于展示Boid算法的运行结果。它可能通过嵌入Java Applet或者使用JavaScript调用后端Java程序来实现动态展示Boid算法的运行效果。 2. BoidDemo.java:这个文件是Java程序的主类,它应该包含了启动BoidDemo程序的核心代码。在这个类中,开发者可以设置模拟参数,初始化Boid集合,并且负责整个程序的运行逻辑。 3. BoidSet.java:这个文件可能定义了一个Boid集合,管理所有的Boid个体。在Boid算法中,每一个Boid代表群体中的一个成员,它会根据特定的规则来移动和交互。 4. MouseVehicle.java:此文件可能是用来处理用户输入的。由于Boid算法是模拟群体行为,这通常意味着会有交互元素,所以这个文件可能负责将鼠标事件转换为Boid群体的输入,以此来控制群体的移动。 5. Boid.java:这个文件中应当定义了Boid个体的属性和行为。在Boid模型中,每一个Boid都有速度、位置等属性,并且会根据邻居Boid的位置、速度等信息来调整自己的行为,从而实现群体行为的模拟。 6. MyUniverseBuilder.java:这个文件可能涉及整个模拟环境的构建。它可能负责初始化模拟的空间,并为Boid群提供一个活动区域,同时也负责管理Boid的生成和生命周期。 ***.txt:这个文件的出现有些出人意料,通常是一个文本文件,它可能包含有关项目的描述信息,或者是该项目发布在网上的网站链接。 对于实现Boid算法,需要注意以下几个核心知识点: - **规则定义**:Boid模型主要有三个核心规则,分别是分离(Separation)、对齐(Alignment)和凝聚(Cohesion)。分离规则让Boid避免与邻近的Boid过于接近,以避免碰撞;对齐规则使Boid与其邻近的Boid保持相同的速度,实现群体的统一行动;凝聚规则让Boid朝着邻近Boid的中心位置移动,维持群体的聚拢。 - **参数调整**:在实际的算法实现中,每个规则通常都会有一个权重参数,通过调整这些参数,可以控制群体行为的具体表现形式。例如,增加分离规则的权重会使群体显得更加分散,而增加对齐规则的权重则会使群体行动更加统一。 - **边界处理**:在模拟过程中,通常需要考虑边界条件,即当Boid运动到模拟区域的边缘时,应该如何处理,是让它穿过去、反弹回来还是停止移动。边界条件的处理方式会对整个群体行为产生重要影响。 - **性能优化**:由于Boid算法需要不断计算每一个Boid与其它所有Boid之间的距离和相对位置,算法的计算量可能很大。为了提高性能,通常需要对算法进行优化,比如使用空间分割技术来减少不必要的距离计算。 - **图形渲染**:在图形学中,渲染是将算法运行结果可视化的过程。对于Boid算法而言,这通常涉及到将Boid的位置、速度、方向等信息转化为屏幕上的像素,以便用户可以直观地看到群体的运动效果。这可能需要使用图形库,如Java的AWT或Swing,来绘制Boid的图形表示。 通过分析上述文件,我们可以推断出该压缩包是一个Java语言实现的Boid算法的完整项目。开发者可以通过修改BoidDemo.java中的逻辑来调整算法参数,而通过Boid.java来查看Boid个体的实现细节。这样的项目不仅对学习群体行为的模拟有帮助,而且能够加深对图形学和Java编程的理解。

func PostOperateOrderList(a *decorator.ApiBase, data *adminStruct.OperateOrderRequest) error { logger.AccessLogger.Info("PostOperateOrderList...") resp := adminStruct.OperateOrderListResponse{} resp.ResponseCommon = a.NewSuccessResponseCommon() logger.AccessLogger.Info("权限:", a.Token.Uids) // 查询数据 resQuery := a.Ts.Table("business_order_info as a "). Joins("inner join business_base as b on b.bid=a.bid"). //Select(`a.boid, a.bid, a.sid, s.wid, a.order_no, a.order_time, // a.sum_num, a.sum_amt, a.pay_amt, a.status, a.proc_status, a.warehouse_status`). Not("a.status=?", model.Delete) // flag 1商品待入库订单列表2商品出库 //if data.Flag == "1" { // resQuery = resQuery.Where(" warehouse_status in ('1','2') and status='5'") //} else if data.Flag == "2" { // resQuery = resQuery.Where(" warehouse_status in ('3','4') and status='6'") //} if len(data.Status) > 0 { resQuery = resQuery.Where(" a.status in ?", data.Status) } if data.BeginDate > 0 { resQuery = resQuery.Where(" a.order_time>=?", data.BeginDate) } if data.EndDate > 0 { resQuery = resQuery.Where(" a.order_time<=?", data.EndDate) } if data.Bid > 0 { resQuery = resQuery.Where(" a.bid=?", data.Bid) } if data.Sid > 0 { resQuery = resQuery.Where(" a.sid=?", data.Sid) } if len(data.Sname) > 0 { sup := admin_lib.SupplierBase{ Db: a.Ts, LikeName: data.Sname, } sids, _ := sup.QuerySupplierNameLikeSids() if len(sids) > 0 { resQuery = resQuery.Where(" a.sid in ?", sids) } } if data.Wid > 0 { resQuery = resQuery.Where(" a.wid=?", data.Wid) } if len(data.OrderNo) > 0 { resQuery = resQuery.Where(" a.order_no like ?", fmt.Sprintf("%%%s%%", data.OrderNo)) } if a.Token.Uids != nil && a.Token.User.Uid != 1 { resQuery = resQuery.Where("b.cuid in ?", *a.Token.Uids) } // 查询总条数 a.DbErrSkipRecordNotFound(resQuery. Count(&resp.Count). Error) if resp.Count > 0 { //var err error // 查询订单信息 //tmpResp := []adminStruct.SupplierOrderResponse{} a.DbErrSkipRecordNotFound(resQuery. Select(`a.boid, a.bid, a.sid, a.wid, a.order_no, a.order_time, be.bname, se.sname, w.wname, a.sum_num, a.sum_amt, a.pay_amt, a.status, a.proc_status, a.warehouse_status, a.logistics_id`). Joins("inner join business_expand as be on be.bid=a.bid"). Joins("inner join supplier_expand as se on se.sid=a.sid"). Joins("inner join warehouse_info as w on w.wid=a.wid"). Order("a.boid desc"). Limit(a.Size). Offset(a.Offset). Find(&resp.Data). Error) //// 获取boid数组 //var boids []int64 //for _, tmp := range resp.Data { // boids = append(boids, tmp.Boid) //} // 查询明细SKU信息 //tmpRows := []adminStruct.OperateOrderDetail{} ////tmpDetail := []adminStruct.BusinessOrderDetail{} //tmpDetail, err := admin_lib.QueryBusinessOrderSku(boids) //if err != nil { // logger.AccessLogger.Error("ERROR:", err.Error()) // return a.ReturnPublicErrorResponse(err.Error()) //} //copier.Copy(&tmpRows, &tmpDetail) //logger.AccessLogger.Info("len:", len(tmpRows)) //for idx, main := range resp.Data { // for _, details := range tmpRows { // if details.Boid == main.Boid { // resp.Data[idx].Detail = append(resp.Data[idx].Detail, details) // } // } //} } // 准备返回数据 return a.ReturnSuccessCustomResponse(resp) }

2023-07-16 上传

func PostOperateOrderList(a *decorator.ApiBase, data *adminStruct.OperateOrderRequest) error { logger.AccessLogger.Info("PostOperateOrderList...") resp := adminStruct.OperateOrderListResponse{} resp.ResponseCommon = a.NewSuccessResponseCommon() logger.AccessLogger.Info("权限:", a.Token.Uids) // 查询数据 resQuery := a.Ts.Table("business_order_info as a "). Joins("inner join business_base as b on b.bid=a.bid"). Not("a.status=?", model.Delete) if len(data.Status) > 0 { resQuery = resQuery.Where(" a.status in ?", data.Status) } if data.BeginDate > 0 { resQuery = resQuery.Where(" a.order_time>=?", data.BeginDate) } if data.EndDate > 0 { resQuery = resQuery.Where(" a.order_time<=?", data.EndDate) } if data.Bid > 0 { resQuery = resQuery.Where(" a.bid=?", data.Bid) } if data.Sid > 0 { resQuery = resQuery.Where(" a.sid=?", data.Sid) } if len(data.Sname) > 0 { sup := admin_lib.SupplierBase{ Db: a.Ts, LikeName: data.Sname, } sids, _ := sup.QuerySupplierNameLikeSids() if len(sids) > 0 { resQuery = resQuery.Where(" a.sid in ?", sids) } } if data.Wid > 0 { resQuery = resQuery.Where(" a.wid=?", data.Wid) } if len(data.OrderNo) > 0 { resQuery = resQuery.Where(" a.order_no like ?", fmt.Sprintf("%%%s%%", data.OrderNo)) } if a.Token.Uids != nil && a.Token.User.Uid != 1 { resQuery = resQuery.Where("b.cuid in ?", *a.Token.Uids) } // 查询总条数 a.DbErrSkipRecordNotFound(resQuery. Count(&resp.Count). Error) if resp.Count > 0 { a.DbErrSkipRecordNotFound(resQuery. Select(`a.boid, a.bid, a.sid, a.wid, a.order_no, a.order_time, be.bname, se.sname, w.wname, a.sum_num, a.sum_amt, a.pay_amt, a.status, a.proc_status, a.warehouse_status, a.logistics_id`). Joins("inner join business_expand as be on be.bid=a.bid"). Joins("inner join supplier_expand as se on se.sid=a.sid"). Joins("inner join warehouse_info as w on w.wid=a.wid"). Order("a.boid desc"). Limit(a.Size). Offset(a.Offset). Find(&resp.Data). Error) //// 获取boid数组 //var boids []int64 //for _, tmp := range resp.Data { // boids = append(boids, tmp.Boid) //} } // 准备返回数据 return a.ReturnSuccessCustomResponse(resp) }

2023-07-16 上传

func AppOperateOrderList(a *decorator.ApiBase, data *appStruct.AppOperateOrdersListRequest) error { logger.AccessLogger.Info("AppOperateOrderList...") var err error var boids []int64 //where := map[string]interface{}{} resp := appStruct.OperateOrderListResponse{} //orderMains := []appStruct.OperateOrderList{} resp.ResponseCommon = a.NewSuccessResponseCommon() query := rds.DB.Table("business_order_info as a"). Select(`a.boid, a.contract_no, a.bid, b.bname, s.sid, s.sname, w.wid, w.wname, a.order_no, a.ctime, a.sum_num, a.sum_amt, a.pay_amt, a.proc_status, a.status, a.remark`). Joins("left join supplier_base as s on s.sid=a.sid"). Joins("left join business_base as b on b.bid=a.bid"). Joins("left join warehouse_info as w on w.wid=a.wid"). Not("a.status=?", model.Delete) // 订单状态 1待采购2已取消3已下单未付款4已付款未发货5已发货6已到中转仓7中转仓转发中8已到官仓9删除 // 10申请退货11退货中12退货成功退款中13退货成功退款成功 if len(data.Status) > 0 { query = query.Where("a.status in ?", data.Status) //where["a.status"] = data.Status } if len(data.Search) > 0 { query = query. Or("b.bname like ?", fmt.Sprintf("%%%s%%", data.Search)). Or("s.sname like ?", fmt.Sprintf("%%%s%%", data.Search)) } if len(data.OrderNo) > 0 { query = query.Where("a.order_no like ?", fmt.Sprintf("%%%s%%", data.OrderNo)) } if len(data.Keyword) > 0 { kw := fmt.Sprintf("%%%s%%", data.Keyword) query = query.Where("a.order_no like ? or b.bname like ? or s.sname like ?", kw, kw, kw) } logger.AccessLogger.Info("size:", a.Size, "offset:", a.Offset) res := query.Count(&resp.Count) if res.Error != nil { logger.AccessLogger.Error("ERROR:", res.Error.Error()) return a.ReturnPublicErrorResponse("") } res = query.Order("a.boid desc"). Offset(a.Offset). Limit(a.Size). Find(&resp.Data) // 明细数据未处理 for _, v := range resp.Data { boids = append(boids, v.Boid) } // 查询明细SKU信息 tmpRows := []appStruct.OperateOrderDetail{} tmpDetail := []adminStruct.BusinessOrderDetail{} tmpDetail, err = admin_lib.QueryBusinessOrderSku(boids) if err != nil { logger.AccessLogger.Error("ERROR:", err.Error()) return a.ReturnPublicErrorResponse(err.Error()) } copier.Copy(&tmpRows, &tmpDetail) logger.AccessLogger.Info("len:", len(tmpRows)) // sku id数组 //gsids := []int64{} //for _, v := range tmpRows { // gsids = append(gsids, v.Gsid) //} //specs, err := admin_lib.QueryBusinessOrderSpecs(gsids) //utils.Error(err) //logger.AccessLogger.Info("len:", len(specs)) // 匹配返回值 for idx, main := range resp.Data { //dataTmp := adminStruct.BusinessOrderList{} for _, details := range tmpRows { if details.Boid == main.Boid { //details = append(details, k) resp.Data[idx].Detail = append(resp.Data[idx].Detail, details) } } //dataTmp.BusinessOrderMainInfo = main //dataTmp.Detail = details //resp.Data = append(resp.Data, dataTmp) } return a.ReturnSuccessCustomResponse(resp) }

2023-07-14 上传