Cruising monohull
The vessel profile's outline for a cruising monohull, and the vessels it draws.
On this page
Code
import { CRUISING_MONOHULL, VesselProfile, type VesselOutline } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The cruising monohull outline as traced at 13.39 m, dimensioned in meters read from the points marked on it.";
const outline: VesselOutline = CRUISING_MONOHULL;
/** Drawing units to the meter: the length overall, from the transom to the bow's tip, is the reference length. */
const perMeter: number = (outline.hooks.bowTip - outline.hooks.transom) / outline.referenceLength;
/** A distance on the drawing, in meters. */
function meters(units: number): string {
return `${(units / perMeter).toFixed(2)} m`;
}
export default function Drawn(): ReactElement {
const { hooks }: VesselOutline = outline;
return (
<VesselProfile
outline={outline}
dimensions={{
lengthOverall: meters(hooks.bowTip - hooks.transom),
waterlineLength: meters(hooks.waterlineForward - hooks.waterlineAft),
draft: meters(hooks.keelFoot - hooks.waterline),
freeboard: meters(hooks.waterline - hooks.deckAtBow),
}}
/>
);
}
The cruising monohull outline is traced from YACHT magazine's side elevation of the Jeanneau Sun Odyssey 440, a production cruising yacht of 13.39 m: a sheer rising gently to a stem with its bow roller, a raked transom, three hull windows, a coachroof with its window band, and below the antifouling line the canoe body, the fin keel with its bulb, the spade rudder, and the shaft with its strut and propeller. The rig, the rails, the flag and the anchor are left out. A shorter waterline comes off both ends in the drawing's own split of its overhangs.
The outline is traced at 13.39 m and listed in VESSEL_OUTLINES as cruising-monohull; the kit exports it as
CRUISING_MONOHULL. Every sailboat in the vessel catalog, about 130 models, takes this outline unless her range has
its own. Given a vessel's proportions, the vessel profile stretches it to her
length overall, waterline length, freeboard and draft; a particular not given follows the length overall in the
outline's proportion.
Examples
Vessels from this outline
Code
import { CRUISING_MONOHULL, VesselProfile } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The Bavaria C38, Jeanneau Sun Odyssey 440 and Hallberg-Rassy 50, each drawn from the cruising monohull outline " +
"at her own particulars and to one scale.";
interface Vessel {
/** The vessel, as the catalog names her. */
readonly name: string;
/** Length overall, meters. */
readonly loa: number;
/** Length at the waterline, meters, where the catalog has it. */
readonly lwl?: number;
/** Draft, meters. */
readonly draft: number;
/** Freeboard at the bow, meters, where the catalog has it. */
readonly freeboard?: number;
}
/** Particulars from the vessel catalog. */
const VESSELS: readonly Vessel[] = [
{ name: "Bavaria C38", loa: 11.9, lwl: 10.27, draft: 2.05 },
{ name: "Jeanneau Sun Odyssey 440", loa: 13.39, lwl: 12.0, draft: 2.3 },
{ name: "Hallberg-Rassy 50", loa: 16.3, lwl: 14.8, draft: 2.4 },
];
export default function Vessels(): ReactElement {
return (
<div style={{ display: "grid", gap: "var(--space-md)" }}>
{VESSELS.map(
({ name, loa, lwl, draft, freeboard }: Vessel): ReactElement => (
<figure key={name} style={{ margin: 0 }}>
<VesselProfile
outline={CRUISING_MONOHULL}
proportions={{ lengthOverall: loa, waterlineLength: lwl, draft, freeboard }}
frameLength={16.3}
dimensions={{
lengthOverall: `${loa.toFixed(2)} m`,
waterlineLength: lwl === undefined ? undefined : `${lwl.toFixed(2)} m`,
draft: `${draft.toFixed(2)} m`,
}}
/>
<figcaption style={{ marginTop: "var(--space-xs)", color: "var(--text-dim)", fontSize: "0.85em" }}>
{name}
</figcaption>
</figure>
),
)}
</div>
);
}
Related
- Vessel profile: the component, its props, and the outline for each hull shape.