2021-11-02

用origin软件画“三维式二维叠加图”

定义解释

“三维式二维叠加图”其实是我自己取的名字,其实主要指的是类似如下图片所示的内容:

类似切片扫描图

具体做法

画出三维图

  1. 画出所需描点的三维图,这里我参考的是这位前辈的方法,https://jingyan.baidu.com/article/0964eca26953b18285f536d2.html
  2. 在这里我也重新说一下;
  3. 导入所需表格数据,数据排列格式最好如图所示:
    请添加图片描述

请添加图片描述

  1. 选取前三列形成三维数据,注意第三列数据要设置为Z数据,形成第一个三维空间的二维折线图;
    请添加图片描述

  2. 通过上一步生成了第一个二维平面,可以点击图右击鼠标选择plot details选项对折线图进行细节操作;

  3. 对于其他数据组,在plot setup进行操作,操作如图
    请添加图片描述请添加图片描述

  4. 分别将原Y,Z数据去除,并添加新的YZ数据,然后添加到图中,如上图顺序点击;

至此生成了三维空间的二维图部分,但是没有出现如原始图的平面背景

添加平面背景

  1. 本节添加平面参考前辈的添加方法,链接为https://blog.csdn.net/HuangTao1996/article/details/100694941,

  2. 同理我也会在这重新描述一下

  3. 我采用的方法主要是为每一组数据绘制一张平面图,首先点击工具栏新建三维图
    请添加图片描述

  4. 接着设置相应参数,比如我的第一组数据y坐标为1,那么我应该生成的是y=1的平面,设置uv值分别为范围值,y设置=1,然后选择添加到当前生成图,选项为在左下角第二个选项,在对应图框里我设置的各参数如图
    请添加图片描述请添加图片描述

注意在左边黄色框中调节的是网格的参数,右边黄色边框显示的是x和z的范围,即平面边界值
至此,三维式二维叠加图形成了

总结

本方法主要应用了生成三维图和添加平面的方法,可以根据自己的要求进一步美化,但形成效果不一定算很好看的,只是个人意见,也希望如果有更好的方法,能在评论区告诉我,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生产者消费者问题是一个经典的同步问题,其中生产者和消费者共享一个缓冲区,生产者向缓冲区中生产产品,消费者从缓冲区中消费产品。在多线程的环境下,生产者和消费者可能会同时访问缓冲区,因此需要对缓冲区进行同步控制。 以下是一个简单的生产者消费者问题的实现: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define BUFFER_SIZE 10 int buffer[BUFFER_SIZE]; int count = 0; int in = 0; int out = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t empty = PTHREAD_COND_INITIALIZER; pthread_cond_t full = PTHREAD_COND_INITIALIZER; void *producer(void *arg) { int i; for (i = 0; i < 20; i++) { pthread_mutex_lock(&mutex); while (count == BUFFER_SIZE) { pthread_cond_wait(&empty, &mutex); } buffer[in] = i; in = (in + 1) % BUFFER_SIZE; count++; printf("producer: produced %d\n", i); pthread_cond_signal(&full); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } void *consumer(void *arg) { int i, data; for (i = 0; i < 20; i++) { pthread_mutex_lock(&mutex); while (count == 0) { pthread_cond_wait(&full, &mutex); } data = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; printf("consumer: consumed %d\n", data); pthread_cond_signal(&empty); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main() { pthread_t tid1, tid2; pthread_create(&tid1, NULL, producer, NULL); pthread_create(&tid2, NULL, consumer, NULL); pthread_join(tid1, NULL); pthread_join(tid2, NULL); return 0; } ``` 在代码中,我们定义了一个大小为10的缓冲区,使用一个计数器count来记录缓冲区中产品的数量,in和out分别表示生产者和消费者在缓冲区中的位置。我们使用了两个条件变量empty和full来控制生产者消费者的同步。 在生产者中,当缓冲区已满时,生产者会等待empty条件变量,直到缓冲区有空位。当生产者生产完一个产品后,会唤醒消费者,并释放互斥锁。 在消费者中,当缓冲区为空时,消费者会等待full条件变量,直到缓冲区有产品。当消费者消费完一个产品后,会唤醒生产者,并释放互斥锁。 通过使用互斥锁和条件变量,我们可以保证生产者和消费者的正确同步,避免了竞争条件和死锁等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值