c语言 修正正弦曲线,[原创]正弦曲线

[原创]正弦曲线

一个有关调度类的应用实例补充,该程序在屏幕上绘制一条三个周期的正弦曲线,每个周期的绘制由三个独立的时间片控制,因为每个时间片分配的时间相同,所以每个周期的绘制几乎同步进行,这样提高绘制速度,由于绘图方法不佳,所以图形在形成动画时抖动强烈,希望大家多提解决办法的意见和建议,谢谢。

#include

#include

#include

#include

#include

#include

#include

#include

#include "dispatch.h"

#define PI 3.14159265

#define inc(T) T/100.0

#define K 240

#define T_COUNT 3

static int x=1,y,A=120,flag=0;

static int color=WHITE;

class MyDispatch : public Dispatch {

public:

MyDispatch();

clock_msg OnClockSliceExecute(unsigned int id,msg_data *d);

};

MyDispatch::MyDispatch() {

register int i;

for(i=0;i

// Adjust delay time to update or get down the drawing speed

AddSlice(50);

}

clock_msg MyDispatch::OnClockSliceExecute(unsigned int id,msg_data *d) {

register float i;

if(bioskey(1)) {

int key=bioskey(0);

if(key==0x11b)

return msgTurnOff;

}

switch(id) {

case 1:

case 2:

case 3:

for(i=-PI;i<=PI;i+=inc(T_COUNT)) {

y=A*sin(i)+K;

putpixel(x,y,color);

x++;

}

if(id==T_COUNT) {

if(color==WHITE) {

color=BLACK;

x=1;

}

else {

color=WHITE;

if(flag==0){

if(A>-120) A-=2;

else flag=1;

}

else if(flag==1) {

if(A<120)

A+=2;

else flag=0;

}

x=1;

}

}

break;

}

return msgUser;

}

int main() {

int gdriver = DETECT, gmode;

initgraph(&gdriver, &gmode, "");

MyDispatch md;

md.StartDispatch();

closegraph();

printf("Sin wave, programmed by yuki\n");

printf("Have a nice day, bye bye!\n");

getch();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Windows 控制 CPU 正弦曲线的 C 代码: ```c #include <Windows.h> #include <math.h> #define PI 3.14159265358979323846 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wc = { 0 }; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND); wc.lpszClassName = TEXT("CPU Sinusoid"); if (!RegisterClass(&wc)) return 1; HWND hWnd = CreateWindow(TEXT("CPU Sinusoid"), TEXT("CPU Sinusoid"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); if (!hWnd) return 2; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static int cxClient, cyClient; static int iPosX = 0, iPosY = 0; static double dTheta = 0.0; switch (message) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // 计算正弦曲线的值 int iMaxX = cxClient - 1; int iMaxY = cyClient - 1; int iX = iPosX; int iY = iPosY; for (int i = 0; i < iMaxX; i++) { double dSin = sin(dTheta); iY = (int)(iMaxY * (1.0 - dSin) / 2.0); MoveToEx(hdc, iX, iY, NULL); dTheta += 0.01; if (dTheta > 2 * PI) dTheta -= 2 * PI; iX++; if (iX > iMaxX) break; dSin = sin(dTheta); iY = (int)(iMaxY * (1.0 - dSin) / 2.0); LineTo(hdc, iX, iY); } EndPaint(hWnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); } } ``` 这个程序创建了一个窗口,然后在窗口中绘制一个 CPU 正弦曲线。每次绘制时,都会计算当前正弦曲线的值,并在窗口中绘制一条线段。曲线的周期是 2π,可以通过修改 `dTheta` 的增量来改变周期。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值