要在UE4中实现自定义框选功能,首先我们来分析一下顶顶一框选插件需要些什么模块?

  • 绘制模块
  • 显示模块
  • 计算模块

嗯,大概分这么三个模块,好,现在我们一个个模块来分析实现。首先分析实现一下显示模块。

提示:

如果功能需要打包成插件,请先浏览第四章

一、显示模块

首先我们需要做一些准备

1.创建Wedgit作为显示载体

UE4绘制直线的方式很多,这里我使用DrawLine在RenderTarget里绘制,绘制的实现放在后面说。

然后我们需要让自定义框选的线显示在屏幕上,那么使用wedgit来显示是比较理想的,所以我们来创建一个widget,命名为CustomSelectUI,并为CustomSelectUI添加一个image作为显示的载体,命名为Background。

2.创建Material作为RenderTarget的显示载体

光一个image也是无法显示我们绘制的线的,因为我们的线是画在RenderTarget里的,而image没法直接使用RenderTarget,所以我们还需要创建一个Material来承载RenderTarget。这里创建一个Material命名为Mat_Paint。

3.为Material创建一个Texture

创建的Texture是有讲究的,Texture必须是存黑色的即RPG(0,0,0),然后分辨率可自定义。这里我使用PS制作了一个纯黑的PNG图片,并设置分辨率为2048x2048,并导入到UE4生成Texture,并命名为Mat_Transparent_Max。
在这里插入图片描述

使用纯黑色的原因在第四小节说明。

4.实现Material的作用

Material出来作为RenerTarget的载体外,还有设置笔刷的颜色,以及使背景透明的作用。

先来看一下Mat_Paint的蓝图

在这里插入图片描述

首先将Mat_Paint节点的Details/Material/Material Domain更换为User Interface,即将Material改为Material Interface。

并未Mat_Paint添加一个Texture,将之前创建的Mat_Transparent_Max拖入Mat_Paint中,右键节点选择Convert to Parameter将节点参数化,并取名RT_Texture,这是为了后面动态设置做的准备。

在这里插入图片描述

然后将RT_Texture连接到Mat_Paint中的Opacity上,Opacity节点是Material控制材质透明度的接口,在Opacity中RGB(0,0,0)表示全透明,RGB(1,1,1)表示不透明,即纯黑色表示全透明,纯白色表示不透明,这就是为什么我们需要一张纯黑色的Texture的原因。因为我们需要一个透明的材质赋予image这样我们才能看到Wedgit后面的场景,使场景不会被我们的image遮挡。

然后创建一个Constant3Vector,并且也将其参数化,命名为PaintColor,这为之后修改画笔颜色预留接口。将PaintColor连接到Mat_Paint的Final Color上。Final Color接口控制着材质最终显示的颜色。

到这里,擦材质我们就做好了。

5.显示

这里我在CustomSelectUI构造时为Background添加Mat_Paint动态材质。我们来看一下蓝图

在这里插入图片描述

  • RenderMat变量是Material Instance Dynamic类型用于存储动态创建的Mat_Paint,方便之后使用;
  • LineLinearColor变量是LinearColor类型,用于设置画笔颜色

到这里显示部分就完成了。

二、绘制模块

1.获取鼠标在屏幕中的位置坐标

线的绘制我使用DrawLine函数根据鼠标点击的点来绘制点与点之间的直线,绘制模块最终要的两个步骤就是获取鼠标点击的屏幕上的点和根据点集绘制多边形。

实现获取鼠标在屏幕上的位置,这里我们需要重写两个函数,OnMouseButtonUp和OnMouseButtonDown,我们来看一下蓝图。

在这里插入图片描述

在这里插入图片描述

  • MouseDown用于标识鼠标的按下与抬起,true表示按下,false表示抬起。

  • Setup控制是否开始绘制。

  • IsFirstPoint标识第一个点与其余点。

  • PolygonPoints是存储鼠标点击的点的数组,启动绘制之后鼠标每点击一次变向数组中添加一个Vector2D元素。

  • CurrentPoint存储鼠标当前点击的屏幕坐标。

  • StartPoint存储绘制直线的起点的屏幕坐标。

  • MousePositionAdaptDPI是自己封装的获取鼠标屏幕坐标的函数,之所以封装是为例修改方便。

在这里插入图片描述

到此,获取鼠标的屏幕坐标就实现了,接下来要根据鼠标点击确定的点集PolygonPoints绘制直线。

2.绘制直线

再绘制直线之前,需要做一些准备工作,即创建直线绘制的载体RenderTarget并用之前创建好的RenderMat承载,然后将RenderMat绑定到Background上显示。这里我绑定到Setup按钮的OnClicked事件下。

在这里插入图片描述

  • CreateCanvasRenderTarget2D函数负责创建RenderTarget,RenderTarget可以直接使用引擎默认的,也可以自己创建自定义的,这里我使用引擎默认的。

    在这里插入图片描述

    Width和Height控制着RenderTarget的长宽比例,超出这个比例的部分屏幕将无法绘制,如:

    在这里插入图片描述

    红框部分的屏幕比例就是1920:1080,超出着部分的屏幕将无法绘制,当然在全屏运行的情况下不会出现这种问题。出现这个问题是因为我的计算机屏幕尺寸就是1920:1080,运行时,UE4的实际运行窗口是蓝色部分,很明显由于windows菜单栏和UE运行窗口的菜单栏占据了屏幕的部分像素,所以UE的实际运行窗口是蓝色部分,其比例显然不是1920:1080,所以超出部分就没办法绘制了。这个RenderTarget的比例可以根据自己的实际需求更改。

  • SetupCustomSelect函数负责绘制的启动与关闭

在这里插入图片描述
准备工作结束后便可以开始绘制直线了,直线的绘制放在Tick函数下,每帧绘制。

在这里插入图片描述

  • LineThickness控制直线绘制时的粗细程度。

  • StartPaint是具体的直线绘制函数。

    在这里插入图片描述

    其中RenderColor必须设置纯白色,只有这样绘制出来的直线才是不透明的。

绘制直线这里有一点需要注意,即需要设置我们Background的锚点为左上角,因为RenderTarget的原点在左上角,只有这样鼠标点击的位置才会和绘制的位置匹配,否则会出现位置偏移的问题。

在这里插入图片描述

3.清除绘制内容

考虑到会有绘制出错的情况,所以添加一个清除绘制内容的功能。清除绘制内容原理比较简单,只需要清除RenderTarget缓存和PolygonPoints点击即可。

这里我绑定在Delete按钮的OnClicked事件下。

在这里插入图片描述

4.结束绘制

在这里插入图片描述

结束绘制之后就要开始计算框选内容了,SureSelect函数负责这方面的实现,计算后面讲解。

结束绘制之后需要将最后一个点和第一个点连接来,确保多边形是一个封闭的多边形。EndPaint函数负责这个功能的实现。

在这里插入图片描述

三、计算

计算这里需要用到C++了,在蓝图的SureSelect函数里调用C++的计算函数。

创建一个继承自Actor的C++类,并命名为CustomSelectActor,下面贴出C++源码:

.h

#pragma once#define LeastPointNum 4
#define ActorSamplingPoints 9#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h"
#include "Engine/World.h"
#include "GameFramework/Actor.h"
#include "EngineUtils.h"
#include "GameFramework/PlayerController.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CustomSelectActor.generated.h"USTRUCT()
struct FBoxPointSet
{GENERATED_USTRUCT_BODY()
public:TArray<FVector2D> points;FBoxPointSet(){points.Init(FVector2D(0, 0), 9);}
};UCLASS()
class CUSTOMSELECT_API ACustomSelectActor : public AActor
{GENERATED_BODY()public:	const FVector BoundsPointMapping[8] ={FVector(1, 1, 1),FVector(1, 1, -1),FVector(1, -1, 1),FVector(1, -1, -1),FVector(-1, 1, 1),FVector(-1, 1, -1),FVector(-1, -1, 1),FVector(-1, -1, -1)};protected:virtual void BeginPlay() override;public:	ACustomSelectActor();virtual void Tick(float DeltaTime) override;void GetMax(TArray<FVector2D>& points, float& max_x, float& max_y, int& len);void GetMin(TArray<FVector2D>& points, float& min_x, float& min_y, int& len);void SpwanVertArr(TArray<FVector2D>& polygonPoints, TArray<float>& vertx, TArray<float>& verty, int& len);bool PNPoly(int nvert, TArray<float> vertx, TArray<float> verty, float testx, float testy);UFUNCTION(BlueprintImplementableEvent)bool ProjectWorldLocationToWidgetPosition(APlayerController* player_ctrl, FVector worldLocation, FVector2D& screenPosition);void GetFBoxPointsSet(TArray<FBoxPointSet>& fboxPointsArr,TArray<AActor*>& actorArr,TSubclassOf<AActor>& classFilter,bool& bIncludeNonCollidingComponents,APlayerController* player_ctrl);void GetActorsRefByPointsSet(TArray<AActor*>& outActors,TArray<float>& vertx,TArray<float>& verty,TArray<FBoxPointSet>& fboxPointsArr,TArray<AActor*>& actorArr,TArray<FVector2D>& polygonPoints,int& len);UFUNCTION(BlueprintCallable, Category = "CustomSelect")bool CustomSelect(TArray<AActor*>& outActors,TArray<FVector2D> polygonPoints,TSubclassOf<AActor> classFilter,APlayerController * player_ctrl,bool bIncludeNonCollidingComponents);UFUNCTION(BlueprintCallable, Category = "CustomSelect")float CompuePolygonArea(const TArray<FVector2D> polygonPoints);
};

.cpp

#include "CustomSelectActor.h"ACustomSelectActor::ACustomSelectActor()
{PrimaryActorTick.bCanEverTick = false;}void ACustomSelectActor::BeginPlay()
{Super::BeginPlay();}void ACustomSelectActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}void ACustomSelectActor::GetMax(TArray<FVector2D>& points, float& max_x, float& max_y, int& len)
{max_x = points[0].X;max_y = points[0].Y;for (int i = 1; i < len; i++){if (max_x < points[i].X){max_x = points[i].X;}if (max_y < points[i].Y){max_y = points[i].Y;}}
}void ACustomSelectActor::GetMin(TArray<FVector2D>& points, float& min_x, float& min_y, int& len)
{min_x = points[0].X;min_y = points[0].Y;for (int i = 1; i < len; i++){if (min_x > points[i].X){min_x = points[i].X;}if (min_y > points[i].Y){min_y = points[i].Y;}}
}void ACustomSelectActor::SpwanVertArr(TArray<FVector2D>& polygonPoints, TArray<float>& vertx, TArray<float>& verty, int& len)
{for (int i = 0; i < len; i++){vertx.Add(polygonPoints[i].X);verty.Add(polygonPoints[i].Y);}
}bool ACustomSelectActor::PNPoly(int nvert, TArray<float> vertx, TArray<float> verty, float testx, float testy)
{bool ret = false;for (int i = 0, j = nvert - 1; i < nvert; j = i++){if (((verty[i] > testy) != (verty[j] > testy)) && (testx < (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + vertx[i])){ret = !ret;}}return ret;
}void ACustomSelectActor::GetFBoxPointsSet(TArray<FBoxPointSet>& fboxPointsArr,TArray<AActor*>& actorArr,TSubclassOf<AActor>& classFilter,bool& bIncludeNonCollidingComponents,APlayerController * player_ctrl)
{int i = 0;for (TActorIterator<AActor> Itr(GWorld->GetWorld(), classFilter); Itr; ++Itr){AActor* EachActor = *Itr;const FBox EachActorBounds = Cast<AActor>(EachActor)->GetComponentsBoundingBox(bIncludeNonCollidingComponents);const FVector BoxCenter = EachActorBounds.GetCenter();const FVector BoxExtents = EachActorBounds.GetExtent();FBox2D ActorBox2D(ForceInit);fboxPointsArr.Add(FBoxPointSet());for (uint8 BoundsPointItr = 0; BoundsPointItr < 8; BoundsPointItr++){FVector2D ScreenPos;if (ProjectWorldLocationToWidgetPosition(player_ctrl, BoxCenter + (BoundsPointMapping[BoundsPointItr] * BoxExtents), ScreenPos)){ActorBox2D += ScreenPos;fboxPointsArr[i].points[BoundsPointItr + 1] = ScreenPos;}}fboxPointsArr[i].points[0] = ActorBox2D.GetCenter();actorArr.Add(EachActor);i++;}
}void ACustomSelectActor::GetActorsRefByPointsSet(TArray<AActor*>& outActors,TArray<float>& vertx,TArray<float>& verty,TArray<FBoxPointSet>& fboxPointsArr,TArray<AActor*>& actorArr,TArray<FVector2D>& polygonPoints,int& len)
{int fboxlen = fboxPointsArr.Num();int pointslen = polygonPoints.Num();float max_x = 0;float max_y = 0;float min_x = 0;float min_y = 0;GetMax(polygonPoints, max_x, max_y, len);GetMin(polygonPoints, min_x, min_y, len);for (int i = 0; i < fboxlen; i++){for (int j = 0; j < ActorSamplingPoints; j++){if (fboxPointsArr[i].points[j].X<min_x || fboxPointsArr[i].points[j].X>max_x ||fboxPointsArr[i].points[j].Y<min_y || fboxPointsArr[i].points[j].Y>max_y){break;j = ActorSamplingPoints;}if (PNPoly(len, vertx, verty, fboxPointsArr[i].points[j].X, fboxPointsArr[i].points[j].Y)){outActors.Add(actorArr[i]);j = ActorSamplingPoints;}}}
}bool ACustomSelectActor::CustomSelect(TArray<AActor*>& outActors,TArray<FVector2D> polygonPoints,TSubclassOf<AActor> classFilter,APlayerController * player_ctrl,bool bIncludeNonCollidingComponents)
{int len = polygonPoints.Num();if (len < LeastPointNum){UE_LOG(LogTemp, Warning, TEXT("Polygon has too few points"));return false;}TArray<float> vertx;TArray<float> verty;SpwanVertArr(polygonPoints, vertx, verty, len);TArray<AActor*> actorArr;TArray<FBoxPointSet> fboxPointsArr;GetFBoxPointsSet(fboxPointsArr, actorArr, classFilter, bIncludeNonCollidingComponents, player_ctrl);GetActorsRefByPointsSet(outActors, vertx, verty, fboxPointsArr, actorArr, polygonPoints, len);return true;
}float ACustomSelectActor::CompuePolygonArea(const TArray<FVector2D> polygonPoints)
{int point_num = polygonPoints.Num();if (point_num < 3){UE_LOG(LogTemp, Warning, TEXT("The area is not polygon!"));return 0.0;}double s = polygonPoints[0].Y * (polygonPoints[point_num - 1].X - polygonPoints[1].X);for (int i = 1; i < point_num; ++i)s += polygonPoints[i].Y * (polygonPoints[i - 1].X - polygonPoints[(i + 1) % point_num].X);return fabs(s / 2.0);
}
  • BoundsPointMapping[8]用于确定场景中Actor的边界盒子的8个点。

  • 结构体FBoxPointSet是用来存储采样点集的数据结构,这里我取Actor边界盒子的8个点加中点一共9个点作为采样点集。

  • GetMax和GetMin计算多边形点集的横纵坐标的最大值和最小值。

  • SpawnVertArr负责将多边形点集分成横坐标点集和纵坐标点集。

  • PNPoly函数使用PNPoly算法判断一个点是否在多边形内部。

  • ProjectWorldLocationToWidgetPosition函数是一个由C++父类声明,由蓝图子类实现的函数,负责将场景中的Actor的边界盒子的点的空间坐标投影到屏幕坐标。之所以使用这种方式是因为ProjectWorldLocationToWidgetPosition蓝图节点没有C++版本,而必须使用ProjectWorldLocationToWidgetPosition蓝图节点的原因是ProjectWorldLocationToWidgetPosition蓝图节点投影出来的坐标会根据屏幕尺寸变化而自动适应,其他的空间坐标转屏幕坐标的蓝图节点在非全屏与全屏下会出现位置偏移。

    在这里插入图片描述
    所以这里需要创建一个继承自CustomSelectActor的蓝图子类来重写ProjectWorldLocationToWidgetPosition函数。

  • GetFBoxPointsSet函数负责获取世界中所有Actor的采样点集。

  • GetActorsRefByPointsSet函数负责使用PNPoly函数取在多边形内部的Actor的引用。

  • CustomSelect函数否则暴漏给蓝图提供数据输入输出的接口。

  • CompuePolygonArea函数负责计算多边形的面积,目前还有一些问题,暂时不用理睬。

至此多边形框选功能就完全实现了。来看一下效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、将功能包成UE4插件

如果需要将功能打包成插件,那么就需要将CustomSelectActor的C++类创建在插件里。

1.创建一个空插件

在这里插入图片描述
在这里插入图片描述

创建之后需要在VS中编一下项目,然后关闭引擎,重新打开项目,以便引擎重新加载dll文件,因为插件不属于引擎的一部分,所以引擎没办法直接热加载插件内容。

2.在插件文件夹下创建C++类

我们需要将CustomSelectActor类创建在插件文件夹下,创建好空插件后,再创建C++类时可以选择创建文件夹。

在这里插入图片描述
然后按一、二、三的步骤实现功能即可。

3.打包插件

进入插件管理点集打包

在这里插入图片描述
至此插件就打包好了。

参考博客:
https://blog.csdn.net/weixin_36369675/article/details/88419361
https://www.cnblogs.com/anningwang/p/7581545.html
https://www.cnblogs.com/TenosDoIt/p/4047211.html

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. C\C++ 大作业—员工信息管理系统(STL/类与对象/继承/多态/文件操作)

    最近一直在刚C++的期末大作业,基本思路还是开发一套信息管理系统,今天终于全部码出来了,虽然感觉代码还是很基础,并且由于本人不太会C++的文件操作,最终还是决定使用了上学期C语言的文件操作的相关知识点,将代码全部开源也是我们团队一直的坚持,希望能给各位还在学习C\C…...

    2024/4/15 5:21:01
  2. javase终结

    Java se总结Java语言的历史博客MarkDown语法dos命令发展史Java诞生1995 c+-javase Javame javaee2006 大数据 HadoopJdk开发者工具包 jre运行环境hello world 开始关系public class Hello{public static void main(String[] args){Sytem.out.println("Hello,world"…...

    2024/4/17 16:59:52
  3. ceph 常用命令pool

    添加host:for id in {0…19};do ceph osd crush add-bucket bb_host_KaTeX parse error: Expected group after _ at position 86: …sh move bb_host_̲id root=bb_host_group;done 将osd添加到host下面:for id in {20…39};do ceph osd crush add osd.KaTeX parse error: Exp…...

    2024/4/16 20:02:10
  4. mysql查询,拼接html代码

    //mysql查询,拼接html代码 SELECT <table class="htmlStr" id="htmlStr" > AS htmlStr UNION ALLSELECT <tr id="thead"><th style="width:10%">ID</th><th style="width:20%">片区<…...

    2024/4/15 5:20:58
  5. 6_5日

    SHIFT+F6 修改所有相同的变量 . 面向过程和面向过程面向过程面向对象类与对象的关系类的内存图局部变量和成员变量匿名对象泛型ArrayList方法...

    2024/5/3 23:27:36
  6. lc102二叉树的层序遍历

    lc102二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点) public class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> lists = new LinkedList<…...

    2024/4/24 11:03:42
  7. LeetCode 225. 用队列实现栈(Java代码)

    https://leetcode-cn.com/problems/implement-stack-using-queues/题目描述题解使用一个队列实现即可 每次向队列中加入元素的时候,将队列中之前的元素全部出队列再入队列 这样最新入队列的元素,变成了第一个,第一个出队列。后入先出class MyStack {Queue<Integer> qu…...

    2024/4/24 11:03:43
  8. Go mark自留

    delve调试 dlv调试:https://www.jianshu.com/p/2802d71ab9e9 go mod init dlv debug main.go 格式化 预览gofmt 修改gofmt -w 概念 高并发 执行 脚本执行 go run 编译执行:go build src后目录(默认在src内寻找(Gopath里执行 将exe放入bin:go build -o bin/cal 文件名 go …...

    2024/4/24 11:03:31
  9. Java 07 08 09

    数组与排序可以储存相同的数据类型 引用类型 必须初始化 分配空间 给出初始化值 动态 静态public class Demo01 {public static void main(String[] args) {//动态 我们指定长度 系统给值int[] a=new int[10];//静态 相反int[] a1={1,8,9,45,3};//取值和赋值 会被分配角标 索引…...

    2024/4/24 11:03:30
  10. 软件测试填空题

    1软件缺陷产生的原因包括________,设计,____________以及其他原因 需求 团队工作 2.软件开发模式包括___________,边写边改模式,_____________,螺旋模式 原型模型 瀑布模型 3.黑盒测试用例设计方法包括__________,____________以及因果图法 等价类划分法,边界值分析法,错误推…...

    2024/4/24 11:03:29
  11. CPU100%问题快速定位

    功能问题,通过日志,单步调试相对比较好定位。性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布…...

    2024/4/24 11:03:28
  12. 机器视觉-相机镜头光源介绍及选型-10相机分类

    相机分类 ===================================================================================== 1.1.分类感光芯片:有CCD和CMOS两种模拟相机:用于电视和监控,通用性好、成本低,分辨率低、采集速度慢,易受噪声干扰数字相机:输出标准:IEEE1394;USB2.0;DCOM3;RS-644 L…...

    2024/4/24 11:03:28
  13. D. Nastya Is Buying Lunch(白话讲贪心)

    哎我又变菜了 下面记作Nastya的位置是pos下面记作Nastya的位置是pos下面记作Nastya的位置是pos 结论一:\color{Red}结论一:结论一: 当靠近pos的人可以换位置时,一定换位置\color{Red}当靠近pos的人可以换位置时,一定换位置当靠近pos的人可以换位置时,一定换位置 举个例子a b po…...

    2024/4/24 11:03:27
  14. WSL + windows CMD caffe 训练记录

    Windows及子系统caffe训练流程记录solver.prototxttrain_val.prototxtdeploy.prototxt生成列表txt生成lmdb生成mean文件根据训练图片准备配置文件traintest 需求:长期开发相关的配置还是Linux用的更加熟练一些,现在要在Windows上部署caffe训练环境,WSL又不能支持GPU,所以各…...

    2024/4/24 11:03:28
  15. 将两个有序数组合并到一起

    给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组注意:可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n暴力:t((n+m)*log(m+n)) s(1)System.arraycopy(源数组, 源数组起始位置, 目标数组, 目标数组起始位置, 复制的长度…...

    2024/4/24 11:03:25
  16. MySQL:group by原理和理解

    (1)文章转载自:https://blog.csdn.net/qq403580298/article/details/90756352?ops_request_misc=&request_id=&biz_id=102&utm_term=mysql%20group%20by&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-90756352(2)…...

    2024/4/24 11:03:23
  17. 【数论】px+qy不能表示的最大的数的证明

    结论:如果a,b均是正整数并且互质,那么由 不能凑出的最大正整数是 。1、证明 不可能等于 :反证法:假设,那么即可推出,,,由于ab互质,即,由于,所以,所以同理可得:所以,矛盾2、证明 一定可以表示成 大佬学习创造用到该算法的题目:ACWing525ACWing12…...

    2024/4/15 5:21:13
  18. 电平转换电路

    ...

    2024/4/15 5:21:13
  19. Awr报告关注哪些

    1、总解析 prase - 硬解析 hard prase = 软解析软解析:超过300,程序效率不高;低于80%,说明sql没有被重用。 硬解析:最好小于20,越小越好。sql解析→先进行语义解析,这时会判断sql执行者的权限→生成hash值→在池里找执行计划,找到返回。如何控制软硬解析?答:比如,解…...

    2024/4/18 18:21:02
  20. 深信服校园招聘c/c++软件开发A卷

    题目链接:https://www.nowcoder.com/test/23090658/summary1、围棋遍历函数calc计算围棋中位置(x,y)处连成一片的棋子个数。所谓连成一片,即沿着棋盘横竖线往任意方向遍历,遍历过程允许转弯,不允许走斜线,中间未出现对方棋子或空子。enum color {NONE, WHITE, BLACK, …...

    2024/4/15 5:21:10

最新文章

  1. c++11 标准模板(STL)本地化库 - 平面类别(std::numpunct) - 定义数值标点规则

    本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义数值标点规则 std::numpunct template< class CharT >…...

    2024/5/8 11:27:52
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. Mac brew 安装软件

    Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

    2024/5/3 9:32:52
  4. Redis精品案例解析:Redis实现持久化主要有两种方式

    Redis实现持久化主要有两种方式&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。这两种方式各有优缺点&#xff0c;适用于不同的使用场景。 1. RDB持久化 RDB持久化是通过创建一个二进制的dump文件来保存当前Redis数据…...

    2024/5/7 16:47:17
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57