LoginSignup

Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

ใฏใ˜ใ‚ใซ

ไธ‹่จ˜ใงใƒ‘ใƒฉใƒ‘ใƒฉๆ–‡ๅญ—ไฝœใฃใŸๆ™‚ใจใปใผๅŒใ˜ๆง‹ๆˆใง1็ง’ใ”ใจใซ้‡้€ฒใ‚ใ‚Œใฐใ‚ขใƒŠใƒญใ‚ฐๆ™‚่จˆใงใใใ†ใจๆ€ใฃใŸใฎใงไฝœใฃใฆใฟใ‚‹

ๅ‰ๅ›žไฝœใฃใŸใƒ‘ใƒฉใƒ‘ใƒฉๆ–‡ๅญ—ใซใคใ„ใฆ

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎไฝœๆˆ

RustใงJavascriptๅดใ‹ใ‚‰ๆ™‚ๅˆ†็ง’ใ‚’ๅ—ใ‘ๅ–ใ‚‹ใ€‚

็ธฆๆจช320ใฎ็„กๅœฐใฎ็”ปๅƒใซๅŠๅพ„155ใ‹ใคๅคชใ•2ใฎๅ††ใจใ€ๅŠๅพ„5ใฎๅ††ใ‚’็”จๆ„ใ€‚

ๆฌกใซๆ™‚้‡ๅˆ†้‡็ง’้‡ใ‚’ๆ›ธใใ€‚(ไธ‰่ง’้–ขๆ•ฐๅฟ˜ใ‚ŒใŸใฎใงGemini1.5proใซ่žใ๐Ÿค–)

(s as f64 / 60.0): ็ง’ใ‚’ๅˆ†ใง่กจใ™๏ผˆ0.0 - 1.0๏ผ‰
*360.0: ๅˆ†ใซๅฏพใ™ใ‚‹่ง’ๅบฆใ‚’ๅบฆๆ•ฐๆณ•ใง่จˆ็ฎ—
-90.0: 0็ง’ใฎใจใใซ็ง’้‡ใŒ12ๆ™‚ๆ–นๅ‘ใ‚’ๆŒ‡ใ™ใ‚ˆใ†ใซ90ๅบฆ่ฃœๆญฃ

(m as f64 + s as f64/ 60.0): ๅˆ†ใซ็ง’ใซใ‚ˆใ‚‹็ตŒ้Žๅˆ†ใ‚’ๅŠ ็ฎ—
/60.0: ๅˆ†ใ‚’ๆ™‚้–“ใง่กจใ™๏ผˆ0.0 - 1.0๏ผ‰
*360.0: ๆ™‚้–“ใซๅฏพใ™ใ‚‹่ง’ๅบฆใ‚’ๅบฆๆ•ฐๆณ•ใง่จˆ็ฎ—
-90.0: 0ๅˆ†ใฎใจใใซๅˆ†้‡ใŒ12ๆ™‚ๆ–นๅ‘ใ‚’ๆŒ‡ใ™ใ‚ˆใ†ใซ90ๅบฆ่ฃœๆญฃ

(h as f64 % 12.0 + m as f64 / 60.0 + s as f64 / 3600.0):
h % 12.0: 12ๆ™‚้–“ๅˆถใซใ™ใ‚‹ใŸใ‚ใ€ๆ™‚ใ‚’12ใงๅ‰ฒใฃใŸไฝ™ใ‚Šใ‚’่จˆ็ฎ—
ๅˆ†ใจ็ง’ใ‚’ๆ™‚้–“ใซๅค‰ๆ›ใ—ใฆๅŠ ็ฎ—
/12.0: ๆ™‚ใ‚’12ๆ™‚้–“ใงๅ‰ฒใฃใฆใ€12ๆ™‚้–“ใซๅฏพใ™ใ‚‹ๅ‰ฒๅˆใ‚’่จˆ็ฎ—
*360.0: 12ๆ™‚้–“ใซๅฏพใ™ใ‚‹่ง’ๅบฆใ‚’ๅบฆๆ•ฐๆณ•ใง่จˆ็ฎ—
-90.0: 0ๆ™‚ใฎใจใใซๆ™‚้‡ใŒ12ๆ™‚ๆ–นๅ‘ใ‚’ๆŒ‡ใ™ใ‚ˆใ†ใซ90ๅบฆ่ฃœๆญฃ

ใจใฎใ“ใจใ€‚(ๅฟ˜ใ‚Œใ™ใŽใฆใฆๆ•ฐๅญฆใ‚„ใ‚Š็›ดใ—ใŸใ„๐Ÿ“)

ๆœ€ๅพŒใซใ€Base64ใฎๆ–‡ๅญ—ๅˆ—ใ‚’่ฟ”ใ™ใ€‚

lib.rs

// ็œ็•ฅ

#[wasm_bindgen]
pub fn clock_png(h : u32,m : u32,s : u32) -> String{
    let mut img = DynamicImage::new_rgba8(320,320);
    // ๅ††ใฎไธญๅฟƒๅบงๆจ™
    let center_x = img.width() / 2;
    let center_y = img.height() / 2;
    draw_filled_circle_mut(&mut img, (center_x as i32, center_y as i32), 155, Rgba([0, 0, 0, 255]));
    draw_filled_circle_mut(&mut img, (center_x as i32, center_y as i32), 153, Rgba([0, 0, 0, 0]));
    draw_filled_circle_mut(&mut img, (center_x as i32, center_y as i32), 5, Rgba([0, 0, 0, 255]));

    let s_angle = ((s as f64 / 60.0) * 360.0- 90.0).to_radians();
    draw_line_segment_mut(&mut img,(center_x as f32, center_y as f32),(center_x as f32 + 140.0 * s_angle.cos() as f32,center_y as f32 + 140.0 * s_angle.sin() as f32),Rgba([0, 0, 0, 255])); // ็ง’้‡

    let m_angle = (((m as f64 + s  as f64/ 60.0) / 60.0) * 360.0 - 90.0).to_radians();
    draw_line_segment_mut(&mut img,(center_x as f32, center_y as f32),(center_x as f32 + 120.0 * m_angle.cos() as f32,center_y as f32 + 120.0 * m_angle.sin() as f32),Rgba([0, 0, 0, 255])); // ้•ท้‡

    let h_angle = (((h as f64 % 12.0 + m as f64 / 60.0 + s as f64 / 3600.0) / 12.0) * 360.0 - 90.0).to_radians();
    draw_line_segment_mut(&mut img,(center_x as f32, center_y as f32),(center_x as f32 + 80.0 * h_angle.cos() as f32,center_y as f32 + 80.0 * h_angle.sin() as f32),Rgba([0, 0, 0, 255])); // ็Ÿญ้‡

    let mut buffer = Cursor::new(Vec::new());
    img.write_to(&mut buffer, ImageFormat::Png).unwrap();
    let base64_string = general_purpose::STANDARD.encode(buffer.get_ref());
    // ใƒ‡ใƒผใ‚ฟURLๅฝขๅผใง่ฟ”ใ™
    format!("data:image/png;base64,{}", base64_string)
}


// ็œ็•ฅ

JavascriptใฎsetIntervalใง1็ง’ใ”ใจใซ

ไธŠ่จ˜ใฎ้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ—ใฆๅ‹•ใ‹ใ™โฐ

index.js

// ็œ็•ฅ

setInterval(()=>{
  const now = new Date();
  const h = now.getHours();
  const m = now.getMinutes();
  const s = now.getSeconds();
  document.getElementById("mainImg").src = clock_png(h,m,s);
}, 1000);

// ็œ็•ฅ

ใ“ใ‚Œใงใƒกใ‚คใƒณใฎๆฉŸ่ƒฝใฏๅฎŸ่ฃ…ๅฎŒไบ†๏ผ๏ผ

ไปŠๅ›žใฎๆˆๆžœ็‰ฉ

ใƒ‡ใƒขURL

ใƒ‡ใƒข็”ปๅƒ

RustใจWebAssemblyใงใ‚ขใƒŠใƒญใ‚ฐๆ™‚่จˆไฝœใฃใฆใฟใŸ_001.jpg

ใ‚ฝใƒผใ‚น

ใพใจใ‚

ไปŠๅ›žใฏRustใ‚’ไฝฟใฃใฆใ‚ขใƒŠใƒญใ‚ฐๆ™‚่จˆไฝœใฃใฆใฟใพใ—ใŸใ€‚๐Ÿง‘โ€๐ŸŽจ

ๆ•ฐๅญฆๅฟ˜ใ‚Œใ™ใŽใฆใฆใ€ใ€ไฝ•ไบ‹ใ‚‚ไฝฟใ‚ใชใ„ใจๅฟ˜ใ‚Œใฆใ—ใพใ†ใจๅฎŸๆ„Ÿใ—ใพใ—ใŸ๐Ÿ˜ง

ๅฎš็€ใ™ใ‚‹ใฎใฃใฆ้›ฃใ—ใ„ใ‹ใ‚‰ใ€

ใ•ใ•ใ„ใชใ“ใจใงใ‚‚Outputใ—ใฆใ„ใ“ใ†ใจๆ€ใ„ใพใ™๐Ÿ’ช

โ€ป้–“้•ใ„็ญ‰ใ‚ใ‚Šใพใ—ใŸใ‚‰ใ€ใ”ๆŒ‡ๆ‘˜ใ„ใŸใ ใ‘ใ‚‹ใจๅŠฉใ‹ใ‚Šใพใ™ใ€‚

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
shisojuice

@shisojuice

ๆฏŽๆ—ฅใŒๅˆๅญฆ่€… https://shisojuice.pages.dev

JavaScript's like ranking last week

Comments

eufss0183
@eufss0183
setInterval(()=>{
 // ไธญ็•ฅ
}, 1000);

่ค‡ๆ•ฐใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใงๅŒใ˜ใ‚‚ใฎใ‚’ใ„ใใคใ‹่กจ็คบใ•ใ›ใ‚‹ใจๅˆ†ใ‹ใ‚Šใ‚„ใ™ใ„ใงใ™ใŒใ€ไธŠ่จ˜ใฎๆ–นๆณ•ใ ใจ่ตทๅ‹•ใ‚ฟใ‚คใƒŸใƒณใ‚ฐใซใ‚ˆใฃใฆใฏๆœ€ๅคง็ด„1็ง’ใฎ้…ใ‚ŒใŒ็™บ็”Ÿใ—ใฆใ—ใพใ„ใพใ™ใ€‚

setInterval()ใงใฏใชใsetTimeout()ใ‚’็”จใ„ใฆใ€delayใฏ1000ๆฑบใ‚ๆ‰“ใกใงใฏใชใ1000 - Date.now() % 1000ใจใ™ใ‚‹ใจใ€ใปใผๆญฃ็ขบใซ็ง’ใŒๅˆ‡ใ‚Šๆ›ฟใ‚ใ‚‹ใ‚ฟใ‚คใƒŸใƒณใ‚ฐใงๆ›ดๆ–ฐใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚

index.js
import init, { clock_png } from './rust_clock.js';
(async function run() {
  await init();
  const mainImg = document.getElementById('mainImg');
  (function loop() {
    const now = new Date();
    const h = now.getHours();
    const m = now.getMinutes();
    const s = now.getSeconds();
    mainImg.src = clock_png(h, m, s);
    setTimeout(loop, 1000 - Date.now() % 1000);
  })();
})();
0

Let's comment your feelings that are more than good

Being held Article posting campaign

markdown AIใ‚’ไฝฟใฃใŸ่จ˜ไบ‹ใ‚’ๆŠ•็จฟใ—ใ‚ˆใ†๏ผ

~
View details

่‡ชๅˆ†ใŒ่€ƒใˆใ‚‹ๆœ€้ซ˜ใฎใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒฉใ‚คใƒ•ใƒ—ใƒฉใƒณใซใคใ„ใฆ็ดนไป‹ใ—ใ‚ˆใ†

~
View details
0
0

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address