• 5685阅读
  • 10回复

多边形螺旋线实现方法? [复制链接]

上一主题 下一主题
离线jiangbaijun
 

只看楼主 倒序阅读 楼主  发表于: 2011-12-28
关键词: 螺旋线图像
如图怎么实现?求实现方法
离线roywillow

只看该作者 1楼 发表于: 2011-12-28
这是个数学问题,可以问问咱们数学老师……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线lejcey

只看该作者 2楼 发表于: 2011-12-29
实现方法?当然就是画线了……

注意观察相同长度的边数。

如果楼主是想问几何问题,抱歉,这里是编程论坛,不是数学论坛

你想要的东西都在QPainter中。
离线ninsun

只看该作者 3楼 发表于: 2011-12-29
这个太简单了吧……
计算每次需要偏转的角度(当然每次偏转的角度都是固定的,因为是正多边形……)
然后,每次画线的时候长度都增加一个固定的值。
完毕……
离线小罗啦啦
只看该作者 4楼 发表于: 2011-12-29
每次画线的时候长度不是增加固定的值,而是线长是上一条线的某个比例。这个自己动手算算呗
just a little smile ~
离线reconfig_ali

只看该作者 5楼 发表于: 2011-12-29
引用第3楼ninsun于2011-12-29 08:51发表的  :
这个太简单了吧……
计算每次需要偏转的角度(当然每次偏转的角度都是固定的,因为是正多边形……)
然后,每次画线的时候长度都增加一个固定的值。
完毕……

正解!我之前就是这么干的,lz信不
离线xiaowu311

只看该作者 6楼 发表于: 2011-12-29
.h 文件

#ifndef  MYWIDGET_H
#define  MYWIDGET_H


#include <QWidget>

class MyWidget: public QWidget
{
public:
    MyWidget(QWidget *parent = 0);
protected:
    virtual void paintEvent(QPaintEvent* event);
    void Draw(QPainter * painter);
    QPointF m_beginPointF;
    QPointF m_endPointF;
    float m_CurrentlineLength;
    float m_Prec;
};

#endif
离线xiaowu311

只看该作者 7楼 发表于: 2011-12-29
.cpp 文件

#include "MyWidget.h"
#include <QtGui>

MyWidget::MyWidget(QWidget *parent /* = 0 */):QWidget(parent)
{
    m_Prec = 4;
    m_CurrentlineLength = 10;
    m_beginPointF = QPointF(-10,-10);
    m_endPointF = QPointF(-10,-10+m_CurrentlineLength);
}

void MyWidget::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);

    int side = qMin(width(), height());

    painter.setViewport((width() - side) / 2, (height() - side) / 2,
        side, side);
    painter.setWindow(-100, -100, 200, 200);

    Draw(&painter);
}

void MyWidget::Draw(QPainter * painter)
{
    m_Prec = 4;
    m_CurrentlineLength = 10;
    m_beginPointF = QPointF(-10,-10);
    m_endPointF = QPointF(-10,-10+m_CurrentlineLength);
    painter->save();
    QPen thinPen(palette().foreground(),0.2);
    painter->setPen(thinPen);
    painter->setBrush(palette().foreground());
    for(int i = 0;i < 18;i++)
    {
        painter->translate(m_beginPointF);
        painter->rotate(120);
        painter->translate(-m_beginPointF.rx(),-m_beginPointF.ry());
        m_endPointF = QPointF(m_beginPointF.rx(),m_beginPointF.ry()-m_CurrentlineLength);
        painter->drawLine(m_beginPointF,m_endPointF);
        m_CurrentlineLength += m_Prec;//m_CurrentlineLength *= m_Prec;
        m_beginPointF = m_endPointF;
    }
    painter->restore();
}




第一个图形的实现方法 其余的角度改成 360/ 边数 就ok
离线jiangbaijun

只看该作者 8楼 发表于: 2011-12-29
谢谢楼上各位的回答,因为涉及到不规则图形。所以考虑用纯数学来解决
离线jiangbaijun

只看该作者 9楼 发表于: 2011-12-29
回 5楼(reconfig_ali) 的帖子
如果是正多边形这种方法是不错的
离线jiangbaijun

只看该作者 10楼 发表于: 2011-12-29
回 7楼(xiaowu311) 的帖子
谢谢你的代码,有启发
快速回复
限100 字节
 
上一个 下一个