Python Turtle图形缩放大小和位置

时间:2018-03-26 08:57:02

标签: python turtle-graphics

我想要一些关于Python龟图形的帮助。我需要创建一个在for ... in range()循环中每次变小的房子。

我正在创造三个由基本乌龟形状组成的房屋的风景。有没有办法,当我创建一个具有基本形状的房子时,我可以使用for ... in range()循环来改变房屋位置并使其尺寸稍小一些?

到目前为止我在尝试:

def house(turtlename,hs,xroof,xdoor,xwindow,ywindow):
 housesquare(turtlename,hs)
 turtlename.pu()
 turtlename.goto ((int(hs*xroof),int(hs*1)))
 turtlename.pd()
 housetriangle(turtlename,hs)
 turtlename.pu()
 turtlename.goto((int(hs*xdoor),0 ))
 turtlename.pd()
 housedoor(turtlename,hs*0.7,hs*0.3)
 turtlename.pu()
 turtlename.goto((int(hs*xwindow), int(hs*ywindow)))
 turtlename.pd()
 housesquare(turtlename,hs*0.3)

使用此代码,我尝试绘制一个较小尺寸的第二个房子。 goto()命令扰乱了整个形状,我必须手动完成所有操作,但任务是使用for ... in range(4)绘制四个房屋,每个房屋都要小一些,放置一点距离。

1 个答案:

答案 0 :(得分:2)

您需要绘制 relative ,而不是 绝对 ,时尚。您可以使用const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const project = require('./aurelia_project/aurelia.json'); const { AureliaPlugin, ModuleDependenciesPlugin } = require('aurelia-webpack-plugin'); const { ProvidePlugin } = require('webpack'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); // config helpers: const ensureArray = (config) => config && (Array.isArray(config) ? config : [config]) || []; const when = (condition, config, negativeConfig) => condition ? ensureArray(config) : ensureArray(negativeConfig); // primary config: const title = 'Aurelia Navigation Skeleton'; const outDir = path.resolve(__dirname, project.platform.output); const srcDir = path.resolve(__dirname, 'src'); const nodeModulesDir = path.resolve(__dirname, 'node_modules'); const baseUrl = '/'; const cssRules = [{ loader: 'css-loader' }]; module.exports = ({ production, server, extractCss, coverage, analyze } = {}) => ({ resolve: { extensions: ['.js'], modules: [srcDir, 'node_modules'] }, entry: { app: ['aurelia-bootstrapper'], vendor: ['bluebird'] }, mode: production ? 'production' : 'development', output: { path: outDir, publicPath: baseUrl, filename: production ? '[name].[chunkhash].bundle.js' : '[name].[hash].bundle.js', sourceMapFilename: production ? '[name].[chunkhash].bundle.map' : '[name].[hash].bundle.map', chunkFilename: production ? '[name].[chunkhash].chunk.js' : '[name].[hash].chunk.js' }, performance: { hints: false }, devServer: { contentBase: outDir, // serve index.html for all 404 (required for push-state) historyApiFallback: true }, devtool: production ? 'nosources-source-map' : 'cheap-module-eval-source-map', module: { rules: [ // CSS required in JS/TS files should use the style-loader that auto-injects it into the website // only when the issuer is a .js/.ts file, so the loaders are not applied inside html templates { test: /\.css$/i, issuer: [{ not: [{ test: /\.html$/i }] }], use: extractCss ? ExtractTextPlugin.extract({ fallback: 'style-loader', use: cssRules }) : ['style-loader', ...cssRules] }, { test: /\.css$/i, issuer: [{ test: /\.html$/i }], // CSS required in templates cannot be extracted safely // because Aurelia would try to require it again in runtime use: cssRules }, { test: /\.html$/i, loader: 'html-loader' }, { test: /\.js$/i, loader: 'babel-loader', exclude: nodeModulesDir, options: coverage ? { sourceMap: 'inline', plugins: ['istanbul'] } : {} }, { test: /\.json$/i, loader: 'json-loader' }, // use Bluebird as the global Promise implementation: { test: /[\/\\]node_modules[\/\\]bluebird[\/\\].+\.js$/, loader: 'expose-loader?Promise' }, // embed small images and fonts as Data Urls and larger ones as files: { test: /\.(png|gif|jpg|cur)$/i, loader: 'url-loader', options: { limit: 8192 } }, { test: /\.woff2(\?v=[0-9]\.[0-9]\.[0-9])?$/i, loader: 'url-loader', options: { limit: 10000, mimetype: 'application/font-woff2' } }, { test: /\.woff(\?v=[0-9]\.[0-9]\.[0-9])?$/i, loader: 'url-loader', options: { limit: 10000, mimetype: 'application/font-woff' } }, // load these fonts normally, as files: { test: /\.(ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/i, loader: 'file-loader' } ] }, plugins: [ new AureliaPlugin(), new ProvidePlugin({ 'Promise': 'bluebird' }), new ModuleDependenciesPlugin({ 'aurelia-testing': ['./compile-spy', './view-spy'], 'aurelia-i18n': [{ name: 'locales/en/translation.json', chunk: 'lang-en' }, { name: 'locales/pt/translation.json', chunk: 'lang-pt' }] }), new HtmlWebpackPlugin({ template: 'index.ejs', minify: production ? { removeComments: true, collapseWhitespace: true } : undefined, metadata: { // available in index.ejs // title, server, baseUrl } }), ...when(extractCss, new ExtractTextPlugin({ filename: production ? '[contenthash].css' : '[id].css', allChunks: true })), ...when(production, new CopyWebpackPlugin([{ from: 'static/favicon.ico', to: 'favicon.ico' }])), ...when(analyze, new BundleAnalyzerPlugin()) ] }); 执行此操作,它看起来像:

{
                test: /\.json$/i,
                loader: 'json-loader'
            },

也就是说,相对于你现在的位置移动。但是,完全避免使用.goto()并使用turtle.goto(turtle.xcor() + hs * xwindow, turtle.ycor() + hs * ywindow) .goto().forward()等相关动作方法可能更为简单。 .backward()。这是使用相关运动方法对代码进行的返工:

.left()

请注意,由于相对绘制逻辑,它不仅可以绘制不同大小的房子,还可以旋转房子:

enter image description here