open-api 算法实现

要求:

  • 推荐在openEuler中实现 ,参考https://www.cnblogs.com/rocedu/p/6012545.html第三节
  • 提交相关代码码云(或github)链接(我使用博客园)
  • 提交不少于6张编译测试过程截图
  • 至少包含SM4,SM3的测试

1.检查版本

2.检查sm2 sm3

$ ./apps/openssl ecparam -list_curves | grep SM2
$ echo -n "abc" | ./apps/openssl dgst -SM3

3.检查函数

./apps/openssl enc -ciphers

4.测试SM4

代码:

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openssl/err.h"
#include "openssl/evp.h"
 
/* Before OpenSSL 1.1.1-pre1, we did not have EVP_sm4_ecb() */
#if defined(OPENSSL_VERSION_NUMBER) 
    && OPENSSL_VERSION_NUMBER < 0x10101001L
static const EVP_CIPHER *(*EVP_sm4_ecb)()=EVP_aes_128_ecb;
#endif
 
typedef struct {
    const 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FDH(k-DOP)算法是一种快速的几何碰撞检测算法,在NX二次实际开发中,可以用C++结合UG/Open API函数实现。下面是一个简单的实现过程: 1. 定义k-DOP类型 在C++中,定义k-DOP类型的结构体,包括每个面的法向量和距离。 ```c++ struct KDOPFace { Vector3d normal; double distance; }; ``` 2. 利用UG/Open API函数获取物体的k-DOP表示 在NX中,可以使用UG/Open API函数获取物体的k-DOP表示。具体方法是,先获取物体的边界框,然后根据k-DOP的面的数量和方向,计算出每个面的法向量和距离。 ```c++ BoundingBox3d box = object.boundingBox(); std::vector<KDOPFace> kdopFaces; for (int i = 0; i < numFaces; i++) { KDOPFace face; face.normal = getKDOPNormal(i); face.distance = dot(face.normal, box.center()); kdopFaces.push_back(face); } ``` 3. 判断两个物体是否相交 对于两个物体A和B,它们的k-DOP表示为kDOP_A和kDOP_B,可以使用以下代码判断它们是否相交: ```c++ bool intersects(const std::vector<KDOPFace>& kDOP_A, const std::vector<KDOPFace>& kDOP_B) { for (const auto& faceA : kDOP_A) { if (isSeparatedBy(faceA, kDOP_B)) { return false; } } for (const auto& faceB : kDOP_B) { if (isSeparatedBy(faceB, kDOP_A)) { return false; } } return true; } bool isSeparatedBy(const KDOPFace& face, const std::vector<KDOPFace>& kDOP) { double minDistance = std::numeric_limits<double>::max(); double maxDistance = std::numeric_limits<double>::lowest(); for (const auto& faceB : kDOP) { double distance = dot(face.normal, faceB.normal); if (distance > 0) { maxDistance += distance * faceB.distance; } else { minDistance += distance * faceB.distance; } } return maxDistance < face.distance || minDistance > face.distance; } ``` 4. 将k-DOP表示绘制在屏幕上 可以使用NX的UG/Open API函数将k-DOP表示绘制在屏幕上,以便调试和可视化。 ```c++ void drawKDOP(const std::vector<KDOPFace>& kDOP) { for (const auto& face : kDOP) { Vector3d p1 = face.normal * 100 + face.distance * face.normal; Vector3d p2 = face.normal * -100 + face.distance * face.normal; drawLine(p1, p2); } } ``` 以上就是在NX二次实际开发中,使用C++结合UG/Open API函数实现FDH(k-DOP)算法的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值