鱼C论坛

 找回密码
 立即注册
查看: 2682|回复: 7

小甲鱼老师讲的第17节课后作业里面的那个极坐标在客户区找X,Y坐标不会求解答

[复制链接]
发表于 2016-10-28 19:23:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 谦虚求学 于 2016-10-28 19:32 编辑

2.PNG /* -------------------------------------------------------------------
MyWindows.c -- 基本窗口模型
《Windows 程序设计(SDK)》视频教程
--------------------------------------------------------------------*/

#include <windows.h>
#include <math.h>
#include <strsafe.h>

#define PI 3.1415926                       //圆周率
#define F(x)
#define R(theta)  (sin(4 * theta))      //待作图函数【修改此处,可以得到不同的函数图】
#define P_MIN (0)                            //区间左端点
#define P_MAX (2 * PI)                    //区间右端点【修改此处及上处,可以得到不同的作图区间】
#define LIMIT 2                                //最大坐标轴标度 【修改此处,可以对图像进行缩放】
#define S_NUM 360                         //采样数

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT("MyWindows");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;

        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;

        if (!RegisterClass(&wndclass))
        {
                MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
                return 0;
        }

        hwnd = CreateWindow(szAppName,
                TEXT("鱼C工作室"),
                WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,
                NULL,
                hInstance,
                NULL);

        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);

        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }

        return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT ps;
        static int cxClient, cyClient;
        POINT apt[S_NUM];
        double theta;
        int x, y, cxCenter, cyCenter;

        switch (message)
        {
        case WM_SIZE:
                cxClient = LOWORD(lParam);
                cyClient = HIWORD(lParam);
                return 0;

        case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);

                cxCenter = cxClient / 2;
                cyCenter = cyClient / 2;

                x = (int)(R(P_MIN) * cos(P_MIN) * cxCenter / LIMIT + cxCenter);
                y = (int)(-1 * R(P_MIN) * sin(P_MIN) * cyCenter / LIMIT + cyCenter);   //计算初始屏幕坐标
                MoveToEx(hdc, x, y, NULL);

                for (int i = 0; i < S_NUM; i++)
                {
                        theta = (double)((P_MAX - P_MIN) * i / S_NUM + P_MIN);  //计算角度

                        apt[i].x = (int)(R(theta) * cos(theta) * cxCenter / LIMIT + cxCenter);
                        apt[i].y = (int)(-1 * R(theta) * sin(theta) * cyCenter / LIMIT + cyCenter);  //计算屏幕坐标
                }

                PolylineTo(hdc, apt, S_NUM);

                EndPaint(hwnd, &ps);
                return 0;

        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }

        return DefWindowProc(hwnd, message, wParam, lParam);
}

    我数学不好 希望大神多多指教



捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-28 19:36:10 | 显示全部楼层
x=r*cos(角度)
y=r*sin(角度)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-29 12:57:34 | 显示全部楼层
alltolove 发表于 2016-10-28 19:36
x=r*cos(角度)
y=r*sin(角度)

你好啊 ,我想问的是在  客户区  X,Y坐标怎么定的点  ,或者说在客户区X,Y是如何初始化屏幕的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-29 12:59:01 | 显示全部楼层
alltolove 发表于 2016-10-28 19:36
x=r*cos(角度)
y=r*sin(角度)

谢谢   请给我文字 讲解下  我数学 不好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-29 16:47:12 | 显示全部楼层
客户区就是坐上角是0,0点,横坐标x纵坐标是y啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-29 19:08:14 | 显示全部楼层

真的不会了

本帖最后由 谦虚求学 于 2016-10-29 19:10 编辑
alltolove 发表于 2016-10-29 16:47
客户区就是坐上角是0,0点,横坐标x纵坐标是y啊。。。


感谢你的 回答 ,谢谢   ,就这个代码题而言,我在代码里用笔把我要问的哪个极坐标X,Y转化圈了起来 ,他们在客户区里  花的折线定点问题,我知道客户区的基点在左上角 ,但是要画着个花,代码里说的计算初始屏幕坐标(X 和 Y )怎么在哪里定, 我真的不会了 ,

郁闷

郁闷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-29 21:57:51 | 显示全部楼层
你是说从新定位画面中间为x,y的0,0点吧? 用SetViewportOrgEx这个函数就可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-30 10:33:56 | 显示全部楼层
alltolove 发表于 2016-10-29 21:57
你是说从新定位画面中间为x,y的0,0点吧? 用SetViewportOrgEx这个函数就可以。

谢谢  你  ,我对客户区里比如 画一个东西 我对里面X,Y的定位问题很不懂 ,所以才问这样的问题,心里好无奈 啊,也没有个讲解客户区里画个 物件 定位的书或文章  哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 06:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表