Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

メキシカンハットの描画

Posted on 6月 28, 2024 by Takaaki Naganoya

X(旧称Twitter)の一部で流行っている、むかーーしむかしのBASIC処理サンプルの1つ、メキシカンハット型グラフの描画AppleScriptです。

–> Download full script bundle with libraries

自分もChipmunk BASIC用に移植して投稿していたのですが、AppleScriptにフル書き換えするとどんなもんだと思い、書いてみました。

関数演算ライブラリは、自作のcalcLibASがあるので、これを使い、画像のダイアログ表示用ライブラリを使って画面表示。

AppleScriptでも1秒ぐらいで処理が終了してしまいますが、黒地に緑で描画すると、謎の「味」があります。

AppleScript名:メキシカンハット v2.scptd
— Created 2024-06-28 by Takaaki Naganoya
use AppleScript version "2.5"
use scripting additions
use framework "Foundation"
use framework "AppKit"
use mLib : script "calcLibAS"
use imgDispLib : script "imageDisplayLib"

property NSColor : a reference to current application’s NSColor
property NSString : a reference to current application’s NSString
property NSImage : a reference to current application’s NSImage
property NSScreen : a reference to current application’s NSScreen
property NSBezierPath : a reference to current application’s NSBezierPath
property NSBitmapImageRep : a reference to current application’s NSBitmapImageRep

–パラメータから下地になる画像を作成する
set aSize to current application’s NSMakeSize(300, 300)
set anImage to NSImage’s alloc()’s initWithSize:aSize
set backlColor to (NSColor’s colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:1.0)
set anImage to drawImageWithColorFill(anImage, {0, 0, 300, 300}, backlColor) of me

–描画色
set drawColor to (NSColor’s colorWithCalibratedRed:0.0 green:1.0 blue:0.0 alpha:1.0)

–Mexican Hat
set D to {}
set rDnum to pi / 180

repeat 256 times
  set end of D to 100
end repeat

repeat with y from -180 to 180 by 6
  repeat with x from -180 to 180 by 4
    set u to 120 + (x / 3) – (y / 6)
    
if u < 0 or u ≥ 240 then
      —
    else
      set r to rDnum * (sqrt ((x ^ 2) + (y ^ 2)))
      
set z to 100 * (cos (r – 30)) * (cos (3 * r))
      
set v to 40 – y / 6 – z / 2
      
      
if (item u of D) > v then
        set anImage to psetOnImage(anImage, {u, 256 – v}, drawColor) of me
        
copy v to (item u of D)
      end if
    end if
  end repeat
end repeat

–結果表示
dispImage(anImage, "Mexican Hat") of imgDispLib

on psetOnImage(anImage, posDat, fillColor)
  set retinaF to (NSScreen’s mainScreen()’s backingScaleFactor()) as real
  
–>  2.0 (Retina) / 1.0 (Non Retina)
  
  
anImage’s lockFocus() –描画開始
  
  
set origX to (item 1 of posDat) / retinaF
  
set origY to (item 2 of posDat) / retinaF
  
set sizeX to (1) / retinaF
  
set sizeY to (1) / retinaF
  
  
set theRect to {{x:origX, y:origY}, {width:sizeX, height:sizeY}}
  
  
set theNSBezierPath to NSBezierPath’s bezierPath
  (
theNSBezierPath’s appendBezierPathWithRect:theRect)
  
  
fillColor’s |set|() –色設定
  
theNSBezierPath’s fill() –ぬりつぶし
  
  
anImage’s unlockFocus() –描画ここまで
  
  
return anImage –returns NSImage
end psetOnImage

on drawImageWithColorFill(anImage, drawList, fillColor)
  set retinaF to (NSScreen’s mainScreen()’s backingScaleFactor()) as real
  
–>  2.0 (Retina) / 1.0 (Non Retina)
  
  
anImage’s lockFocus() –描画開始
  
  
set origX to (item 1 of drawList) / retinaF
  
set origY to (item 2 of drawList) / retinaF
  
set sizeX to (item 3 of drawList) / retinaF
  
set sizeY to (item 4 of drawList) / retinaF
  
  
set theRect to {{x:origX, y:origY}, {width:sizeX, height:sizeY}}
  
  
set theNSBezierPath to NSBezierPath’s bezierPath
  (
theNSBezierPath’s appendBezierPathWithRect:theRect)
  
  
fillColor’s |set|() –色設定
  
theNSBezierPath’s fill() –ぬりつぶし
  
  
anImage’s unlockFocus() –描画ここまで
  
  
return anImage –returns NSImage
end drawImageWithColorFill

★Click Here to Open This Script 

(Visited 301 times, 1 visits today)
Posted in 3D dialog Image | Tagged 13.0savvy 14.0savvy 15.0savvy | 15 Comments

15 thoughts on “<span>メキシカンハットの描画</span>”

  1. 12/10/25
    7:22 PM
    2025年12月10日
    7:22 PM

    Reply

    PeterH says:

    こんにちは、
    calcLibAS v.1.5には不思議なバグがひそんでいるらしいのですが。
    こちらのシステム(Sonoma14.8.2 (23J126))では
    (sqrt ((x ^ 2) + (y ^ 2)))
    という計算がナンバー値ではなく、falseを返します。
    よって上記のスクリプトはエッラーしてしまいます。
    本当に不思議なのですが。
    Peter

  2. 12/10/25
    8:23 PM
    2025年12月10日
    8:23 PM

    Reply

    Takaaki Naganoya says:

    Wir wurden darüber informiert, dass bezüglich calcLibAS nicht die erwarteten Berechnungsergebnisse erzielt wurden. Dies ist das zweite Beispiel. Allerdings ist diese Bibliothek sehr einfach und verwendet nur JavaScriptCore.framework zur Durchführung von Berechnungen, was das Aufspüren von Problemen tendenziell erschwert.

    In einer japanischen Umgebung habe ich unter macOS 14/15/26 die erwarteten Ergebnisse erzielt (obwohl dieses Programm vor dem Kauf meines MacBook Air geschrieben wurde und daher mit Retina-Displays etwas inkompatibel ist).

    Tritt dieses Problem in einer deutschen Umgebung mit macOS 14 auf?

    Die Verarbeitung des SQR-Berechnungsteils der Bibliothek ist wie folgt und gibt nur dann false zurück, wenn das Berechnungsergebnis von JavaScriptCore „NaN“ ist.

    on sqrt aParam as real : 0.0
    set aRes to calcSqrt(aParam) of calSub
    if aRes as string = “NaN” then
    return false
    else
    return aRes
    end if
    end sqrt

    Wenn Sie die Werte von x und y kennen, wenn ein Rechenfehler auftritt, ist es einfacher, die Nachholprüfung abzulegen. Bitte lassen Sie es mich wissen (da das Problem in einer japanischen Umgebung nicht aufgetreten ist).

    Darüber hinaus ist bekannt, dass die Durchführung funktionaler Berechnungen über JavaScriptCore auf Computern mit Intel Xeon-CPUs zu anomalen Ergebnissen führt. Ich würde mich freuen, wenn Sie mir auch den Typ der CPU mitteilen könnten.

  3. 12/11/25
    5:39 AM
    2025年12月11日
    5:39 AM

    Reply

    PeterH says:

    TEST – my answer to your message does not go through, tried several times, please send me your e-Mail adress – thank you!

    • 12/21/25
      10:24 AM
      2025年12月21日
      10:24 AM

      Reply

      Takaaki Naganoya says:

      maro_ml@piyocast.com

      is my email address.

  4. 12/17/25
    5:58 PM
    2025年12月17日
    5:58 PM

    Reply

    PeterH says:

    Since my messages did not go through to you (I clicked “Post Comment” but could not find my message in the message list, several times), I sent you several private messages to macscripter.net. Hope you will be able to read them. I hope this one will go through! Thank you!

    • 12/21/25
      10:28 AM
      2025年12月21日
      10:28 AM

      Reply

      Takaaki Naganoya says:

      macscripter.net admin banned me for the reason “You wrote Japanese comment”.
      I cannot understand the actions of the administrator who bans users for reasons I cannot understand.
      I’m treating the site as if it never existed.

  5. 12/18/25
    12:38 AM
    2025年12月18日
    12:38 AM

    Reply

    PeterH says:

    Apparently, posts containing Apple Script or JavaScript code do not go through but somehow get “eaten” by the system.

    • 12/21/25
      10:30 AM
      2025年12月21日
      10:30 AM

      Reply

      Takaaki Naganoya says:

      It’s either a bug in WordPress or an attack protection plugin. This site has been attacked by a lot of bad actors.

  6. 12/18/25
    12:41 AM
    2025年12月18日
    12:41 AM

    Reply

    PeterH says:

  7. 12/18/25
    12:42 AM
    2025年12月18日
    12:42 AM

    Reply

    PeterH says:

    github . com / gianzellweger / Math

  8. 12/18/25
    12:44 AM
    2025年12月18日
    12:44 AM

    Reply

    PeterH says:

    Also, posts containing URLs, even those being html encoded (as described) below, don’t go through. I tried many, many times. The software for this board is severely broken.

  9. 12/18/25
    12:45 AM
    2025年12月18日
    12:45 AM

    Reply

    PeterH says:

    My final word: If I replace your JavaScript based Math Lib by the one by gianzellweger, both Mexican Hats and ASCII art work for me.

  10. 12/21/25
    10:33 AM
    2025年12月21日
    10:33 AM

    Reply

    Takaaki Naganoya says:

    Looking at the current phenomenon, it looks like the source of a program created by someone else was posted on Github without clearly stating the source, but could you please explain this in a way that I can understand?

  11. 12/21/25
    10:39 AM
    2025年12月21日
    10:39 AM

    Reply

    Takaaki Naganoya says:

    You need to understand that there is a “time difference” on Earth. Japan’s time difference from Greenwich Mean Time is +9 hours.

  12. 12/21/25
    10:50 AM
    2025年12月21日
    10:50 AM

    Reply

    Takaaki Naganoya says:

    I realize that you have been very rude to me. Please know that I will deal with rude people accordingly. People who ban for no apparent reason, like the administrator of Macscripter.net, are the type of people I dislike the most.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 26, Tahoe
  • KagiのWebブラウザ、Orion
  • Script Debuggerの開発と販売が2025年に終了
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • NSObjectのクラス名を取得 v2.1
  • 2024年に書いた価値あるAppleScript
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • (確認中)AppleScript Dropletのバグっぽい動作が解消?
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される
  • Script Debuggerがフリーダウンロードで提供されることに
  • 指定フォルダ以下の画像のMD5チェックサムを求めて、重複しているものをピックアップ
  • Dock Menu
  • 執筆中:AppleScript最新リファレンスver2.8対応(macOS 15対応アップデート)
  • macOS 15.5beta5(24F74)でaliasのキャスティングバグが修正された???
  • 余白トリミング実験 v3
  • Claris FileMaker Pro 2025(v22)がリリースされた
  • 複数の重複検出ルーチンを順次速度計測
  • Cocoa-AppleScript AppletがRosettaオンで動いた!
  • シンプルな文字置換

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (160) 26.0savvy (27) CotEditor (67) Finder (53) Keynote (120) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (56) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Newt On Project
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年12月
  • 2025年11月
  • 2025年10月
  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC