MFC 动态绘制直线,圆弧段(连续)如何实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC 动态绘制直线,圆弧段(连续)如何实现相关的知识,希望对你有一定的参考价值。
编程环境是VS2010,要求在MFC中实现动态绘制直线,输入参数是直线段起点,终点,圆弧起点终点以及半径,求如何实现
参考技术A 直线 使用的函数是BOOL LineTo(
HDChdc,
intX,
intY,
);
参数:
hdc:设备场景句柄
X:线段终点X坐标位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部份
Y:线段终点Y坐标位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部份
返回值:
返回TRUE代表移动成功,FALSE代表失败
圆弧 使用的是
BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
(x1,y1)指定外接矩形左上角坐标,
(x2,y2)指定外接矩形右下角坐标。
(x3,y3)是起始点
(x4,y4)是结束本回答被提问者和网友采纳 参考技术B GDIPlus
绘制直线和圆弧都有对应的函数,你只需要把参数传递进来就可以,当然参数变化时就传就更新
绘图当然放在OnPaint WM_PAINT消息响应函数里
如何在 OpenGL 中绘制圆弧
【中文标题】如何在 OpenGL 中绘制圆弧【英文标题】:How to draw an Arc in OpenGL 【发布时间】:2010-04-08 01:07:04 【问题描述】:在使用 C++ OpenGL 制作一个小型 Pong 游戏时,我认为在弹跳时创建弧线(半圆)会很有趣。我决定暂时跳过贝塞尔曲线,直接使用直代数,但我并没有走多远。我的代数遵循一个简单的二次函数 (y = +- sqrt(mx+c))。
这个小摘录只是我尚未完全参数化的一个示例,我只是想看看它的外观。然而,当我画这个时,它给了我一条直线,直线的切线接近 -1.0 / 1.0。
这是 GL_LINE_STRIP 样式的限制还是有更简单的方法来绘制半圆/弧?还是我完全错过了一些明显的东西?
void Ball::drawBounce()
float piecesToDraw = 100.0f;
float arcWidth = 10.0f;
float arcAngle = 4.0f;
glBegin(GL_LINE_STRIP);
for (float i = 0.0f; i < piecesToDraw; i += 1.0f) // Positive Half
float currentX = (i / piecesToDraw) * arcWidth;
glVertex2f(currentX, sqrtf((-currentX * arcAngle)+ arcWidth));
for (float j = piecesToDraw; j > 0.0f; j -= 1.0f) // Negative half (go backwards in X direction now)
float currentX = (j / piecesToDraw) * arcWidth;
glVertex2f(currentX, -sqrtf((-currentX * arcAngle) + arcWidth));
glEnd();
提前致谢。
【问题讨论】:
【参考方案1】:sqrtf((-currentX * arcAngle)+ arcWidth)的目的是什么?当 i>25 时,该表达式变为虚构。这样做的正确方法是使用 sin()/cos() 为您的问题中所述的半圆生成 X 和 Y 坐标。如果您想改用抛物线,更简洁的方法是计算 y=H-H(x/W)^2
【讨论】:
是的,这就是白痴。不知道为什么我决定使用抛物线而不是回想我的单位圆。我想我对为什么有一条垂直线穿过我的画线感到困惑。谢谢以上是关于MFC 动态绘制直线,圆弧段(连续)如何实现的主要内容,如果未能解决你的问题,请参考以下文章
图像处理halcon根据轮廓亚像素点坐标绘图并分割为直线圆弧椭圆段